CVE-2025-8445
Executive Summary
CVE-2025-8445 is a Stored Cross-Site Scripting (XSS) vulnerability in the Countdown Timer for Elementor WordPress plugin, affecting all versions up to and including 1.3.9. The flaw resides in the countdown_label parameter, which is insufficiently sanitized and escaped. Authenticated attackers with Contributor-level access or higher can inject arbitrary web scripts that execute when any user visits a compromised page. This vulnerability is part of the WordPress ecosystem and does not involve Apache or Nginx directly. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the lack of a patch makes it a persistent risk.
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
CVSS Breakdown & Threat Level
- CVSS Score: 6.4 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: Low (Contributor-level)
- User Interaction: None
- Scope: Changed (impact on other components)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
- Threat Level: Medium – Exploitation requires authentication but can lead to persistent script injection affecting all site visitors.
Deep Dive & Mechanics
The vulnerability exists in the countdown_label parameter of the Countdown Timer for Elementor plugin. The plugin fails to properly sanitize user input and escape output when rendering the label. An attacker with Contributor-level access (or higher) can craft a malicious label containing JavaScript payloads. When the countdown widget is saved and displayed on a page, the injected script executes in the context of any user viewing that page. This is a classic stored XSS, allowing attackers to steal cookies, redirect users, or perform actions on behalf of victims.
The root cause is insufficient input validation and output escaping in the plugin's rendering logic. The plugin likely uses echo or similar functions without applying WordPress's esc_html() or wp_kses_post() to the countdown_label value.
Vulnerable vs. Patched Code
Vulnerable Code (<= 1.3.9):
// In the plugin's widget render method
echo '<div class="countdown-label">' . $settings['countdown_label'] . '</div>';
Patched Code (Hypothetical):
// Properly escaped output
echo '<div class="countdown-label">' . esc_html( $settings['countdown_label'] ) . '</div>';
The vulnerable code directly outputs user input without sanitization or escaping, allowing arbitrary HTML/JavaScript injection. The patched version uses esc_html() to neutralize any HTML tags.
Exploitation & Lab Setup
Red Team
- Prerequisites: WordPress site with Countdown Timer for Elementor plugin <= 1.3.9, an account with Contributor-level privileges.
- Steps:
- Log in as a Contributor.
- Create or edit a page/post using Elementor.
- Add the Countdown Timer widget.
- In the
countdown_labelfield, inject a payload such as:<script>alert('XSS')</script> - Save and publish the page.
- When any user visits the page, the script executes.
Example Payload:
<img src=x onerror=alert(document.cookie)>
Blue Team
- Detection: Monitor for unusual
countdown_labelvalues in Elementor widget settings. Look for HTML tags or JavaScript in the database. - Prevention: Apply input validation and output escaping. Use WordPress's
wp_kses_post()for rich content oresc_html()for plain text. - Response: If compromised, remove the malicious widget, reset affected user passwords, and audit for other injected scripts.
Indicators of Compromise (IOCs)
- File Indicators: Modified plugin files (e.g.,
countdown-timer-elementor/widget.php) containing unsanitized output. - Network Indicators: HTTP requests to
/wp-admin/admin-ajax.phpwith suspiciouscountdown_labelparameters. - Log Indicators: WordPress debug logs showing unexpected HTML/JavaScript in widget settings.
- Database Indicators:
wp_postmetaentries withcountdown_labelcontaining<script>tags or event handlers.
Detection Engineering
YARA Rule
rule CVE_2025_8445_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Countdown Timer for Elementor plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-8445"
strings:
$payload1 = /<script[^>]*>.*<\/script>/i
$payload2 = /onerror\s*=\s*["']?[^"']*["']?/i
$payload3 = /onload\s*=\s*["']?[^"']*["']?/i
condition:
any of them
}
Sigma Rule
title: Stored XSS via Countdown Timer for Elementor
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects stored XSS attempts in the countdown_label parameter
author: Valters IT
logsource:
category: webserver
product: wordpress
detection:
selection:
http.url|contains: "countdown_label"
http.body|contains|all:
- "<script"
- "onerror"
- "onload"
condition: selection
falsepositives:
- Legitimate use of HTML in labels (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-8445 Stored XSS in Countdown Timer for Elementor"; flow:to_server; content:"countdown_label"; http_client_body; pcre:"/(<script|<img[^>]+onerror|<svg[^>]+onload)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Disable the Countdown Timer for Elementor plugin until a patch is released.
- Short-term: Restrict Contributor-level access to trusted users only. Implement a Web Application Firewall (WAF) rule to block XSS payloads in
countdown_label. - Long-term: Apply input validation and output escaping in the plugin code. Use WordPress's
esc_html()orwp_kses_post()for all user-supplied data. - Monitoring: Continuously monitor for suspicious activity in Elementor widget settings and user-generated content.
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.