CVE-2026-57718

Unlimited Elements For Elementor <= 2.0.12 - Unauthenticated Stored Cross-Site Scripting

highImproper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
7.2
CVSS Score
7.2
CVSS Score
high
Severity
2.0.13
Patched in
6d
Time to patch

Description

The Unlimited Elements For Elementor plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 2.0.12 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Low
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=2.0.12
PublishedJuly 9, 2026
Last updatedJuly 14, 2026

Source Code

WordPress.org SVN
Patched

Patched version not available.

Research Plan
Unverified

I cannot fulfill your request to provide a detailed exploitation research plan or specific proof-of-concept steps for CVE-2026-57718. My instructions prohibit the generation of actionable exploitation material for specific vulnerabilities or targets. However, I can provide general information regar…

Show full research plan

I cannot fulfill your request to provide a detailed exploitation research plan or specific proof-of-concept steps for CVE-2026-57718. My instructions prohibit the generation of actionable exploitation material for specific vulnerabilities or targets.

However, I can provide general information regarding the mechanics of Stored Cross-Site Scripting (XSS) in WordPress plugins and the standard security practices used to mitigate such risks.

Stored XSS in WordPress Plugins

Stored XSS occurs when a web application receives data from a user and stores it in a persistent database without proper sanitization. This data is later retrieved and rendered on a page for other users (or administrators) without being appropriately escaped. In the context of WordPress plugins, this often happens through several common vectors:

  1. AJAX Handlers: Plugins frequently register AJAX actions via wp_ajax_ (for authenticated users) and wp_ajax_nopriv_ (for unauthenticated users). If a handler accepts input (e.g., via $_POST) and saves it to the database (e.g., using update_option() or $wpdb->insert()) without using sanitization functions, it creates a storage vector.
  2. REST API Endpoints: Similar to AJAX, custom REST API routes registered via register_rest_route() can be vulnerable if the permission_callback is overly permissive and the input processing logic lacks sanitization.
  3. Shortcode Attributes: While shortcodes usually require contributor-level access to embed in a post, vulnerabilities can occur if the attributes passed to the shortcode are echoed directly into the HTML output without escaping.

Defensive Best Practices

To prevent Stored XSS, WordPress developers are encouraged to follow the principle of "Sanitize on Input, Escape on Output."

1. Input Sanitization

All data received from users should be cleaned before being stored. WordPress provides several functions for this:

  • sanitize_text_field(): Strips all HTML tags, line breaks, tabs, and extra whitespace.
  • absint(): Ensures the input is a non-negative integer.
  • wp_kses(): Allows only specific HTML tags and attributes, which is useful for rich text content.

2. Output Escaping

Data retrieved from the database should be escaped immediately before being rendered in the browser. The escaping function used depends on the context:

  • esc_html(): Used when the data is placed inside HTML tags (e.g., <div><?php echo esc_html( $data ); ?></div>).
  • esc_attr(): Used when data is placed within an HTML attribute (e.g., <input value="<?php echo esc_attr( $data ); ?>">).
  • esc_url(): Used for URLs in href or src attributes.
  • wp_json_encode(): Used when passing PHP data to JavaScript contexts.

3. CSRF Protection (Nonces)

WordPress nonces are used to verify that a request originated from a trusted source and was intended by the user. While primarily a defense against Cross-Site Request Forgery (CSRF), they also serve as a barrier for many unauthenticated exploitation attempts. Security researchers typically look for:

  • Missing nonce checks in sensitive AJAX/REST handlers.
  • Nonces that are exposed on public pages, which might allow unauthenticated users to perform actions intended for administrators.

For further information on securing WordPress plugins, I recommend consulting the WordPress Plugin Handbook's Security section and resources like the OWASP Top 10.

Research Findings
Static analysis — not yet PoC-verified

Summary

The Unlimited Elements For Elementor plugin for WordPress is vulnerable to Unauthenticated Stored Cross-Site Scripting in versions up to 2.0.12. This vulnerability allows an unauthenticated attacker to inject malicious scripts into the database via a public-facing endpoint, which then execute in the context of any user (including administrators) who visits the affected page.

Exploit Outline

1. Identify an unauthenticated AJAX action (registered via wp_ajax_nopriv_) or a public REST API endpoint that accepts and persists user-provided settings or content. 2. Construct a malicious POST request targeting /wp-admin/admin-ajax.php (or the REST API base) containing a payload with a script tag (e.g., <script>alert(document.cookie)</script>) in an unsanitized input parameter. 3. Send the request to the server, ensuring the payload is stored in the database. 4. Navigate to a page or administrative dashboard where the plugin renders the stored input. Because the output is not properly escaped with functions like esc_html() or wp_kses(), the script will execute in the victim's browser.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.