CVE-2025-23676
Executive Summary
CVE-2025-23676 is a reflected Cross-Site Scripting (XSS) vulnerability in the LH Email WordPress plugin (slug: lh-email) by shawfactor, affecting versions up to and including 1.12. The vulnerability stems from improper neutralization of user-supplied input during web page generation, allowing an attacker to inject arbitrary JavaScript into a reflected response. This can lead to session hijacking, credential theft, or defacement within the context of the victim’s browser session on the WordPress site.
As this is a WordPress plugin vulnerability, the attack surface is limited to sites running the vulnerable plugin. No public exploit code or proof-of-concept is currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time. However, the lack of a patch from the vendor increases risk for unmaintained installations.
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. Users who installed the plugin via the WordPress admin dashboard or directly from the repository are affected. No third-party package manager (NPM, PyPI, Go, Ruby) is involved. The plugin is not available on any other package registry.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Base Score: 7.1 (High)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: Required (UI:R) – victim must click a crafted link
- Scope: Changed (S:C) – injected script can affect resources beyond the vulnerable component
- Confidentiality Impact: Low (C:L) – limited data exposure
- Integrity Impact: Low (I:L) – limited modification of content
- Availability Impact: Low (A:L) – limited disruption
Threat Level: High. While exploitation requires user interaction, the lack of a patch and the widespread use of WordPress make this a significant risk for unmaintained sites.
Deep Dive & Mechanics
The vulnerability exists in the lh-email plugin, which provides email-related functionality for WordPress. The plugin fails to properly sanitize or escape user-supplied input before reflecting it in the HTTP response. Specifically, a parameter (likely email or similar) is echoed back without proper encoding, allowing an attacker to inject arbitrary HTML and JavaScript.
Attack Flow:
- Attacker crafts a malicious URL containing a JavaScript payload in a vulnerable parameter.
- Victim (authenticated or unauthenticated) clicks the link.
- The WordPress server processes the request and reflects the payload in the response without sanitization.
- The victim’s browser executes the injected script, which can steal cookies, redirect to phishing pages, or perform actions on behalf of the victim.
Root Cause: The plugin uses functions like echo $_GET['param'] or similar without applying WordPress’s esc_html(), esc_attr(), or wp_kses() functions.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical fix based on standard WordPress security practices.
Vulnerable Code (lh-email <= 1.12):
<?php
// Example vulnerable code
$email = $_GET['email'];
echo "You entered: " . $email;
?>
Patched Code (Hypothetical):
<?php
// Properly escape output
$email = isset($_GET['email']) ? sanitize_email($_GET['email']) : '';
echo "You entered: " . esc_html($email);
?>
The patched version uses sanitize_email() to validate the input and esc_html() to encode output, preventing script injection.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with LH Email plugin version <= 1.12 installed and active.
- No authentication required for the vulnerable endpoint.
Exploit Payload:
http://target.com/wp-content/plugins/lh-email/some-file.php?email=<script>alert('XSS')</script>
Steps:
- Identify the vulnerable parameter (e.g.,
email,subject, ormessage) by fuzzing the plugin’s endpoints. - Craft a URL with a JavaScript payload:
http://target.com/wp-content/plugins/lh-email/process.php?email=<img src=x onerror=alert(document.cookie)> - Deliver the link to the victim via email, social engineering, or other means.
- When the victim clicks the link, the script executes in their browser.
Note: No public exploit code is available; this is a conceptual example.
Blue Team (Defense & Detection)
Detection:
- Monitor web server logs for requests containing
<script,onerror,onload, or other XSS indicators in query parameters. - Use a Web Application Firewall (WAF) to block reflected XSS patterns.
Mitigation:
- Disable or remove the LH Email plugin immediately if no patch is available.
- Implement Content Security Policy (CSP) headers to restrict script execution.
- Use WordPress security plugins (e.g., Wordfence) to add virtual patching.
Indicators of Compromise (IOCs)
- URL Patterns:
*/wp-content/plugins/lh-email/*?email=*<script**/wp-content/plugins/lh-email/*?email=*<img*onerror*
- HTTP Request Parameters:
emailcontaining HTML tags or JavaScript code.
- Log Entries:
GET /wp-content/plugins/lh-email/process.php?email=<script>alert(1)</script> HTTP/1.1
- File Hashes (Plugin Files):
- No specific hashes available; monitor for unexpected modifications to plugin files.
Detection Engineering
YARA Rule
rule CVE_2025_23676_LH_Email_XSS {
meta:
description = "Detects reflected XSS attempts targeting LH Email plugin"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-23676"
strings:
$xss1 = /email=.*<script/i
$xss2 = /email=.*<img.*onerror/i
$xss3 = /email=.*onload/i
$xss4 = /email=.*javascript:/i
condition:
any of them
}
Sigma Rule
title: Reflected XSS Attempt Against LH Email Plugin
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects reflected XSS attempts targeting the LH Email WordPress plugin (CVE-2025-23676)
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- 'email=<script'
- 'email=<img'
- 'email=javascript:'
condition: selection
falsepositives:
- Legitimate use of email parameter with special characters (rare)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (msg:"CVE-2025-23676 LH Email Reflected XSS Attempt"; flow:to_server,established; content:"/wp-content/plugins/lh-email/"; http_uri; pcre:"/email=.*(<script|<img.*onerror|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin: Deactivate and delete the LH Email plugin from all WordPress installations.
- Virtual Patching: Use a WAF to block requests containing XSS patterns in the
emailparameter. - Monitor Logs: Review web server logs for exploitation attempts.
Long-Term Fix:
- Since no patch is available, consider migrating to an alternative email plugin that is actively maintained.
- If the plugin is critical, manually apply the fix by escaping output in the plugin’s PHP files (see Vulnerable vs. Patched Code section).
General Best Practices:
- Keep all WordPress plugins and themes updated.
- Implement a Content Security Policy (CSP) to mitigate XSS impact.
- Use WordPress security plugins with virtual patching capabilities.
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.