CVE-2024-37922
Executive Summary
CVE-2024-37922 is a stored Cross-Site Scripting (XSS) vulnerability in the Premium Addons for Elementor WordPress plugin, affecting versions up to and including 4.10.34. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an authenticated attacker with contributor-level access or higher to inject arbitrary JavaScript into widget settings. When an administrator or other user views a page containing the malicious widget, the injected script executes in their browser session, potentially leading to session hijacking, credential theft, or defacement.
This vulnerability is part of the WordPress ecosystem and is not related to Apache or Nginx. The CVSS score of 6.5 (Medium) reflects the need for authenticated access and user interaction, but the impact is amplified in multi-role WordPress environments. No public exploit code or proof-of-concept is currently available, and the vendor has not released a patch.
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 who installed the plugin via the WordPress dashboard or manual upload are at risk. No supply chain compromise has been reported, but the lack of a patch means all installations of the affected versions are vulnerable.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The attack is carried out over the network.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): None (N) – The attacker must be authenticated as a contributor or higher.
- User Interaction (UI): Required (R) – The victim must view the compromised page.
- Scope (S): Changed (C) – The vulnerability impacts resources beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited ability to modify content.
- Availability (A): Low (L) – Limited impact on availability.
Threat Level: Medium. The requirement for authenticated access reduces the attack surface, but the potential for privilege escalation and lateral movement in a WordPress environment makes this a significant risk for sites with multiple user roles.
Deep Dive & Mechanics
The vulnerability exists in the widget rendering logic of the Premium Addons for Elementor plugin. The plugin fails to sanitize or escape user-supplied input when generating HTML output for certain widget parameters. An attacker with contributor-level access can create or edit a post/page using Elementor and insert a vulnerable widget (e.g., a testimonial, pricing table, or team member widget). By injecting a malicious payload into a text field (such as a name, description, or URL), the payload is stored in the database and later rendered without proper escaping.
When an administrator or other user views the page, the injected JavaScript executes in their browser context. This can be used to steal cookies, perform actions on behalf of the victim, or redirect to malicious sites.
Root Cause: The plugin uses echo or print functions without applying WordPress escaping functions like esc_html(), esc_attr(), or wp_kses_post() on user-controlled data.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on common XSS fixes.
Vulnerable Code (pre-4.10.34):
// In a widget render method
$title = $settings['title'];
echo '<h3 class="premium-title">' . $title . '</h3>';
Patched Code (hypothetical):
// In a widget render method
$title = $settings['title'];
echo '<h3 class="premium-title">' . esc_html( $title ) . '</h3>';
The patched version uses esc_html() to neutralize any HTML or JavaScript before output.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress installation with Premium Addons for Elementor <= 4.10.34.
- A user account with contributor-level access or higher.
Exploitation Steps:
- Log in as a contributor.
- Create a new post or page using Elementor.
- Add a vulnerable widget (e.g., "Testimonial" or "Pricing Table").
- In a text field (e.g., "Name" or "Description"), inject the following payload:
<img src=x onerror=alert('XSS')> - Save and publish the post.
- As an administrator, view the published post. The JavaScript executes.
Advanced Payload:
<script>
fetch('/wp-admin/admin-ajax.php?action=your_malicious_action');
</script>
Blue Team
Detection:
- Monitor for unusual widget content in posts/pages.
- Look for HTML tags or JavaScript in fields that should only contain plain text.
- Use the detection rules provided below.
Mitigation:
- Immediately restrict contributor-level access if possible.
- Apply a Web Application Firewall (WAF) rule to block common XSS patterns.
- Monitor logs for suspicious AJAX requests originating from Elementor widgets.
Indicators of Compromise (IOCs)
- File Hashes (SHA256): (None available; plugin files are standard WordPress plugin files)
- Network Indicators:
- Outbound connections to attacker-controlled domains from the WordPress admin panel.
- Unusual AJAX requests to
/wp-admin/admin-ajax.phpwith suspicious parameters.
- Log Entries:
- WordPress debug log entries showing unescaped output.
- Web server logs with requests containing
<script>tags in POST data.
- Database Indicators:
- Rows in
wp_postmetaorwp_postscontaining HTML/JavaScript in fields that should be plain text.
- Rows in
Detection Engineering
YARA Rule
rule Detect_Premium_Addons_XSS_Payload {
meta:
description = "Detects XSS payloads targeting Premium Addons for Elementor"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-37922"
strings:
$xss1 = /<script[^>]*>.*<\/script>/is
$xss2 = /onerror\s*=\s*["']?[^"']*["']?/i
$xss3 = /onload\s*=\s*["']?[^"']*["']?/i
condition:
any of ($xss*) and filesize < 10KB
}
Sigma Rule
title: Potential XSS via Premium Addons for Elementor
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects XSS payloads in POST requests to WordPress admin
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=elementor'
sc-status: 200
keywords:
- '<script'
- 'onerror='
- 'onload='
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in Elementor widgets (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2024-37922 Premium Addons XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=elementor"; http_uri; pcre:"/(<script|onerror=|onload=)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to operations.
- Restrict user roles – Only grant contributor access to trusted users.
- Apply a WAF rule to block common XSS patterns in POST data.
Long-Term Fix:
- Monitor the vendor's website for a patched version (expected to be 4.10.35 or higher).
- Once a patch is released, update immediately.
- Consider using a security plugin (e.g., Wordfence) to add an additional layer of protection.
Workaround:
- If the plugin cannot be disabled, manually audit all widgets and apply
esc_html()orwp_kses_post()to any user-controlled output. This requires modifying plugin files and will be overwritten on update.
Valters IT
DevSecOps & Cyber Threat Intelligence
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.