CVE-2026-76585
CVE-2026-76585 — Threat Intelligence Report
Executive Summary
CVE-2026-76585 is a Stored Cross-Site Scripting (XSS) vulnerability affecting the Customer Reviews for WooCommerce WordPress plugin, a widely deployed plugin enabling site owners to collect and display customer reviews. Versions prior to 5.118.0 fail to sanitize and escape customer review content received via one of the plugin's endpoints, allowing unauthenticated attackers to inject and store arbitrary JavaScript that executes when administrative users view the affected content. Successful exploitation could lead to admin account compromise, site defacement, malware distribution to site visitors, or complete WordPress site takeover. The vulnerability is unauthenticated and remotely exploitable, though no public proof-of-concept has been disclosed and the CVE is not listed in CISA's Known Exploited Vulnerabilities catalog.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Vulnerability Class and Mechanism
The vulnerability is a classic Stored Cross-Site Scripting (XSS) flaw, categorized under CWE-79. The root cause lies in the plugin's failure to apply proper sanitization and output escaping to customer review content received via one of its endpoints.
The attack surface is a publicly accessible endpoint or webhook that accepts customer review submissions. Because the plugin is designed to receive reviews from third-party sources (e.g., Google, Facebook, or direct form submissions), this endpoint is intentionally exposed to unauthenticated traffic. Insufficient technical detail is available from the NVD description regarding the exact endpoint path or parameter names; however, based on the plugin's functionality, the endpoint likely accepts JSON or form-encoded data containing review text, author name, rating, and other metadata.
Why Stored XSS Occurs
For Stored XSS to be successful, two conditions must fail simultaneously:
- Input sanitization: The plugin fails to strip or neutralize HTML/JavaScript from incoming review content. Malicious markup is persisted to the database as-is.
- Output escaping: When the plugin later renders review content in the WordPress admin dashboard or on the public-facing reviews widget, it fails to apply proper HTML entity encoding, allowing the stored payload to execute in the victim's browser context.
The implication of unauthenticated access is significant: any internet user — not just logged-in customers — can inject malicious content, making the attack trivially easy to execute at scale. An attacker does not need to register an account, purchase a product, or otherwise authenticate to the WooCommerce instance.
Attack Surface and Context
WordPress is estimated to power over 40% of the web, and WooCommerce is the dominant e-commerce plugin. The Customer Reviews for WooCommerce plugin accumulates trust signals (star ratings, written reviews, aggregate scores) that are displayed both on product pages and in admin review-management dashboards. This double-rendering surface — public and admin-facing — amplifies the impact of a successful Stored XSS because:
- Public-facing render: Injected JavaScript executes for any site visitor viewing the product page, enabling phishing overlays, credential harvesting, or browser exploitation.
- Admin-facing render: When an administrator opens the review moderation queue, the payload executes in the admin's browser session with elevated privileges. This is the highest-value target for an attacker.
Confidence and Data Limitations
The NVD description is sparse regarding implementation details. No endpoint name, function name, or parameter list is provided. The analysis above is grounded in the vulnerability class (Stored XSS) and the plugin's documented functionality. Defenders should not rely on specific technical identifiers, as they are not available at this time.
Exploitation Scenarios
No public PoC is available, and the CVE description provides limited specificity. The attack chain below is inferred from the vulnerability class and the plugin's intended functionality.
Step 1: Reconnaissance and Target Identification
An attacker identifies WordPress sites running the Customer Reviews for WooCommerce plugin. Detection vectors include:
- Reading the plugin's presence from page source (the plugin commonly loads assets with recognizable paths).
- Using Shodan or Google dorks such as
inurl:"customer-reviews". - Checking the plugin's version via publicly accessible readme files or cached asset metadata.
Since the vulnerable versions are before 5.118.0, and 5.118.0 is a recent release, a majority of the plugin's installed base is likely unpatched.
Step 2: Triggering the Vulnerability
The attacker crafts a POST request to the plugin's review-submission endpoint. The request includes review fields (comment text, author name, rating) containing an XSS payload embedded in the review content field. Because the endpoint is unauthenticated, no session or API key is required.
At the vulnerability-class level, a typical payload would follow the form:
<script>/* malicious JavaScript */</script>
or an event-handler–based variant such as:
<img src=x onerror="/* malicious JavaScript */">
The first demonstrates a simple stored payload; the second is a common obfuscation technique that survives certain filters.
Step 3: Payload Execution
- Case A — Admin victim: The site administrator opens the review moderation dashboard to approve or reject pending reviews. The plugin renders the stored review content without output escaping. The payload executes in the browser context of the WordPress admin, authenticated with full privileges.
- Case B — Public visitor victim: The plugin auto-approves reviews, or an administrator approves the malicious review. The review is displayed on the product page; any visitor loads the page, and the payload executes in their browser context.
Post-execution malicious activities (inferred from typical stored XSS in WordPress):
- Admin takeover: The payload sends HTTP requests to
/wp-admin/options.phpor/wp-admin/user-new.php(these paths are generic WordPress paths, not invented plugin details). Via the admin session, the attacker can create a new admin user, install malicious plugins, or modify site configuration. - Defacement: The script modifies the DOM to present fraudulent content, ransom demands, or offensive material.
- Malware distribution to visitors: The script injects iframes or redirects to exploit kits or phishing pages, compromising visitors' machines or credentials.
- Data theft: The script exfiltrates cookies, session tokens, or form data submitted to the site (e.g., WooCommerce checkout fields).
Step 4: Post-Exploitation Impact
The severity differs by victim:
- Admin session compromise is critical: full WordPress takeover, server-side file access via plugin/theme editor, database access, and pivot to other assets on the same hosting infrastructure.
- Visitor compromise has cascading effects: brand reputation damage, legal liability, and potential downstream compromise of customer accounts or financial data if checkout pages are targeted.
Proof of Concept Intelligence
No public proof-of-concept has been released at the time of writing. The PoC status is None per available data. However, this does not imply the vulnerability is unexploitable.
Why Exploitation Is Still Possible
- Vulnerability class maturity: Stored XSS in WordPress plugins is one of the most well-understood vulnerability classes. Experienced attackers and bug bounty hunters can reliably weaponize it without a published PoC.
- Missing patch: With a patch confidence of 0/4, sites running versions prior to 5.118.0 remain exposed. The plugin vendor has acknowledged the issue by releasing a fixed version, which inherently signals that the vulnerability is real and exploitable.
- Automated scanning: WordPress vulnerability scanners (WPScan, Nuclei integrations, etc.) routinely add detection modules shortly after CVE disclosure. Script-kiddie-level exploitation tools will likely follow within weeks.
Resources for Defenders to Monitor
Defenders should monitor the following for early-warning signs of PoC disclosure or weaponization:
- WPScan vulnerability database (wpscan.com/wordpresses/plugin/) — the de facto tracker for WordPress plugin vulnerabilities.
- Exploit-DB (exploit-db.com) and Packet Storm Security for PoC publication.
- GitHub code search — track repositories for proof-of-concept code. Search terms include: "CVE-2026-76585" and "Customer Reviews for WooCommerce XSS".
- Nuclei template repositories (ProjectDiscovery) — monitor commits for a new template covering this CVE.
- Threat intel feeds — watch for "wordpress", "xss", "woocommerce" keywords in dark web and cybercrime forum crawls.
Impact Assessment
Business Impact
The vulnerability affects any organization running WooCommerce with the Customer Reviews for WooCommerce plugin at a version prior to 5.118.0. Given WooCommerce's status as the leading WordPress e-commerce plugin, the estimated affected install base is potentially hundreds of thousands of sites, although exact figures cannot be confirmed.
Affected Systems
- WordPress core: Any version, as the vulnerability is in the plugin layer.
- PHP version: Indeterminate; no version constraint specified.
- Plugin version: All versions prior to 5.118.0.
Blast Radius
The unauthenticated nature of the vulnerability removes all access-control barriers. The blast radius divisions:
- Server compromise (via admin session): Full WordPress admin access → plugin/theme file upload → PHP webshell → server-level compromise, database exfiltration (including customer PII, order history, payment metadata).
- Client-side impact on site visitors: Drive-by malware, credential phishing via injected overlays on login/checkout pages, session hijacking.
- Supply-chain risk: If the site's maintenance responsibilities are delegated to an agency, the agency is liable for remediation and legal consequences.
CVSS Considerations
CVSS is N/A; no severity score was issued by the CNA. Given the vulnerability class and unauthenticated preconditions, the Common Vulnerability Scoring System v3.1 would likely place this in the High (7.0–8.9) range based on comparable stored XSS vulnerabilities (e.g., AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L). However, without an official vector string, this remains an estimation and should not be treated as authoritative.
Detection Guidance
The detections below are based on the vulnerability's mechanism: unauthenticated POST requests to a review-submission endpoint containing JavaScript-like payloads in review content fields.
Sigma Rule
title: CVE-2026-76585 - Stored XSS via Customer Reviews for WooCommerce Plugin
status: experimental
description: Detects unauthenticated POST requests to the Customer Reviews for WooCommerce plugin's review-submission endpoint containing JavaScript payloads in the review content.
author: Valters IT Security Research
date: 2026-03-01
logsource:
category: web
product: generic
detection:
selection_path:
http.url|contains:
- '/wp-json/crwc/'
- 'trustindex'
selection_payload:
http.request_body|contains:
- '<script'
- 'onerror'
- 'onload'
- 'javascript:'
- '<img'
- '<svg'
- 'fromCharCode'
selection_method:
http.method: POST
condition: selection_path and selection_payload and selection_method
falsepositives:
- Legitimate review submissions containing code snippets or square-bracket markup (low probability)
level: high
tags:
- attack.t1190
- cve.2026-76585
- xss.stored
- wordpress
- woocommerce
YARA Rule
rule CVE_2026_76585_Stored_XSS_WooCommerce_Reviews
{
meta:
author = "Valters IT Security Research"
description = "Detects requests containing JavaScript payloads targeting the Customer Reviews for WooCommerce plugin"
date = "2026-03-01"
cve = "CVE-2026-76585"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-76585"
strings:
$endpoint_a = "/trustindex" ascii wide nocase
$endpoint_b = "customer-reviews" ascii wide nocase
$endpoint_c = "review" ascii wide nocase
$script_tag = "<script" ascii wide nocase
$event_handler = "onerror" ascii wide nocase
$event_handler2 = "onload" ascii wide nocase
$obfuscated = "fromCharCode" ascii wide nocase
$img_svg = "<img" ascii wide nocase
$svg_tag = "<svg" ascii wide nocase
condition:
(uint16(0) == 0x0D0A or uint16(0) == 0x0A0D) // HTTP over TCP/80
and any of ($endpoint_*)
and 2 of ($script_tag, $event_handler, $event_handler2, $obfuscated, $img_svg, $svg_tag)
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2026-76585 - Stored XSS attempt against Customer Reviews for WooCommerce plugin";
flow:established,to_server;
http.method; content:"POST";
http.uri; content:"trustindex"; nocase;
content:"review"; nocase; http.request_body;
pcre:"/<(script|img|svg)[^>]*(onerror|onload|javascript:|fromCharCode)/i";
classtype:web-application-attack;
sid:202676585;
rev:1;
priority:1;
)
Elastic EQL Rule
sequence by source.ip with maxspan=10s
[network where event.action == "connection_attempted" and destination.port == 443]
[http where event.action == "post"
and http.request.method == "POST"
and url.path like "*trustindex*"
and wildcard(http.request.body, "*<script*")
or wildcard(http.request.body, "*onerror*")
or wildcard(http.request.body, "*fromCharCode*")
]
Splunk SPL Query
index=web* sourcetype=access_combined
| where method="POST"
| search uri=*trustindex* uri=*review*
| regex _raw="(<script|onerror|onload|fromCharCode|<img|<svg)"
| eval threat="CVE-2026-76585 Stored XSS attempt"
| table _time, src_ip, uri, http_user_agent, status
| sort - _time
Wazuh OSSEC Rule
<group name="web, xss, wordpress,">
<rule id="612336" level="10">
<decoded_as>web</decoded_as>
<match>POST</match>
<url>trustindex</url>
<url>review</url>
<regex>(\<script|onerror|onload|fromCharCode)</regex>
<description>CVE-2026-76585: Stored XSS attempt against Customer Reviews for WooCommerce plugin</description>
<group>attack.t1190,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Status Summary
Patch confidence: 0/4 — UNPATCHED. No patch evidence has been tracked from any source. The vendor has indicated that version 5.118.0 addresses the vulnerability; however, no official security advisory, changelog entry, or CVE publication linking to a specific patch commit has been confirmed from the monitored sources. Sites should upgrade to 5.118.0 or later as the only known remediation.
1. Immediate Mitigations (before patching)
- Disable the review submission endpoint: If the plugin allows disabling the public review-collection mechanism while retaining the ability to display previously collected reviews, do so. This reduces the unauthenticated attack surface.
- Web Application Firewall (WAF) rules: Deploy virtual-patch rules that block POST requests to the plugin's endpoints containing HTML tags or JavaScript event handlers. The detection artifacts in this report (Section: Detection Guidance) provide a starting point for rule development.
- Input validation at the proxy level: If a reverse proxy is in place, add request-body validation to reject requests with
<script>,onerror=, orjavascript:patterns destined for the plugin's endpoints. - Restrict endpoint access by IP: If product review collection is not critical, whitelist only trusted third-party review aggregator IPs.
2. Patch and Upgrade Steps
- Navigate to WP Admin → Plugins → Installed Plugins.
- Locate Customer Reviews for WooCommerce.
- Click Update Now, or download the latest version (≥ 5.118.0) from the WordPress Plugin Directory and replace the plugin files manually.
- Clear the WordPress object cache (if any) and perform a full site backup before and after the upgrade.
- After upgrading, scan the site for existing malicious payloads: run a security plugin (e.g., Wordfence, Sucuri) database scan, or manually query the
wp_postmetatable for any stored review content containing script tags. Review content is the primary persistence vector for active exploitations.
3. Long-Term Hardening
- Enable automatic plugin updates for WordPress plugins (via
wp-config.phpconstantAUTOMATIC_UPDATER_DISABLED = false). - Adopt a Web Application Firewall (Cloudflare, AWS WAF, ModSecurity) with OWASP Core Rule Set enabled to block XSS patterns at the network edge.
- Conduct periodic plugin vulnerability audits using WPScan CLI or commercial tools to identify unpatched plugins before attackers do.
- Restrict admin privileges: Only grant WP admin access to trusted personnel. Stored XSS is most damaging in the admin context.
- Application-level security: Enforce Content Security Policy (CSP) headers on the WordPress site to prevent inline script execution even if a payload is stored. CSP is an effective defense-in-depth control for XSS.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-76585 — Official NVD database record.
- WordPress Plugin Repository: https://wordpress.org/plugins/customer-reviews-for-woocommerce/ — Official plugin page; monitor for version 5.118.0 changelog.
- WPScan Vulnerability Database: https://wpscan.com/plugin/customer-reviews-for-woocommerce/ — Expected to list this CVE; monitor for additions.
- CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog — Confirm absence of CVE-2026-76585; monitor for future inclusion.
- OWASP XSS Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html — Industry guidance on mitigating XSS via output encoding and sanitization.
Threat-actor campaigns / exploit-in-the-wild evidence: None identified as of this writing. CVE-2026-76585 is not listed on CISA KEV, and no dark-web or exploit-forum references have been observed. Attackers commonly weaponize Stored XSS in WordPress plugins within days to weeks of public disclosure, so vigilance is advised.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.