Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify site with guest submit + forced location creation enabled
-
DeliverySubmit guest event with entity-encoded payload in location_name
-
ExploitPayload stored, bypasses sanitization
-
ExecutionVictim views page, browser decodes and executes script
-
ImpactSession/credential theft in site origin
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 | Exploitation requires two specific plugin settings to be explicitly turned on by a site administrator, both of which default to off: guest event submission (eme_fs[guest_submit]) AND forced location creation (eme_fs[force_location_creation]). The payload must be placed in the event[location_name] parameter and, per the fix, is delivered as HTML-entity-encoded markup to evade wp_kses before browser decoding re-materializes it as live script in the location map balloon. Limiting factors: on default configurations the attack surface does not exist; a victim must subsequently view the injected page for the stored script to fire; and sites updated to version 3.2.23 or later are protected. |
| Impact | This is a moderate-severity Stored XSS (CVSS 5.4, CWE-79) reported by Wordfence with a vendor fix in the commit history, but real-world risk is substantially gated by configuration. The CVSS vector (AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N) correctly reflects the tension in this bug: it is network-reachable and unauthenticated (PR:N), yet carries high attack complexity (AC:H) precisely because exploitation requires two non-default settings - guest event submission and forced location creation - to be explicitly enabled by an administrator. No EPSS score, KEV listing, or public POC was provided in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation; the AC:H plus the non-default-config dependency strongly suggests this is a high-CVSS-reachability-but-low-real-world-risk issue rather than a mass-exploitation candidate. The scope change (S:C) and C:L/I:L reflect script execution in victims' browsers against the WordPress site's origin. Note the conflict defenders should weigh: the 'unauthenticated' label is real per PR:N, but it only matters on the minority of sites that deviate from the secure defaults, so prioritization should be driven by configuration audit rather than by the unauthenticated qualifier alone. |
| Exploit ScenarioDerived | On a site where an administrator has enabled both guest event submission and forced location creation, an unauthenticated attacker submits an event whose location_name field carries an HTML-entity-encoded payload (e.g. <img onerror=...>) that slips past wp_kses and is decoded to live markup when rendered in a location map balloon. When any user - including an administrator reviewing submissions - views the affected page, the injected script executes in their browser session. No public exploit code was identified in the provided intelligence. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
Stored cross-site scripting in the Events Made Easy WordPress plugin (all versions up to and including 3.2.22) lets unauthenticated attackers inject arbitrary script into the event[location_name] field, which then executes in the browser of any visitor who views the affected location map balloon. Per the CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N) the flaw is remotely reachable without credentials, but exploiting it requires an administrator to have explicitly enabled both the guest event submission feature (eme_fs[guest_submit]) and forced location creation (eme_fs[force_location_creation]) - both of which default to off - so default-configured sites are not exposed. There is no public exploit identified at time of analysis and the plugin is not in CISA KEV; the vendor addressed the issue in version 3.2.23.
RemediationAI
Vendor-released patch: upgrade the Events Made Easy plugin to version 3.2.23 or later, which is the release containing the fix (compare the 3.2.23 changeset at https://plugins.trac.wordpress.org/changeset?reponame=&new=3748824%40events-made-easy%2Ftags%2F3.2.23&old=3723758%40events-made-easy%2Ftags%2F3.2.21 against your installed copy, and review the upstream commit https://github.com/liedekef/events-made-easy/commit/3d9e92f98a9d9e443d65323ec8c86d598b3e34e0). Because the attack surface only exists when both eme_fs[guest_submit] and eme_fs[force_location_creation] are turned on, the immediate compensating control for sites that cannot patch is to disable guest event submission (eme_fs[guest_submit]) and/or forced location creation (eme_fs[force_location_creation]) in the plugin's front-end submission settings - the trade-off is that anonymous visitors will no longer be able to submit events, and if only guest_submit is disabled while unauthenticated event creation is provided some other way, residual exposure may remain. Both settings default to off, so administrators who never enabled them need take no action beyond routinely updating. After patching, consider auditing existing location and event records for stored markup in the location_name field, since any payload injected before the fix would persist in the database. Additional context is available in the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/f80a1fa2-d44b-4101-a891-fce21ee99427?source=cve.
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 root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically a stored/browser-side XSS that survives the plugin's wp_kses-based sanitization. Events Made Easy uses the _eme_kses_single() wrapper in includes/eme-functions.php to filter submitted values, but the pre-fix logic stripped tags before decoding HTML entities, allowing an attacker to submit markup in the <img onerror=...> form: wp_kses sees no live tag, and the browser re-decodes the entities on render, re-materializing an executable element. The payload flowed through the front-end submission handler in includes/eme-fs.php (around lines 831 and 867) and the location handling code in includes/eme-locations.php (around line 3082) into the event[location_name] value, which was then interpolated into a template string and passed to Leaflet's marker.bindPopup() in js/eme_show_maps.js. The upstream commit 3d9e92f98a9d9e443d65323ec8c86d598b3e34e0 fixes this in two complementary ways: it moves html_entity_decode() ahead of tag stripping in _eme_kses_single() so entity-obfuscated tags are caught, and it replaces the string-concatenation popup construction with DOM nodes built via the Sanitizer API's setHTML() (which strips <script>, on* handlers, and javascript: URLs). Per the CPE cpe:2.3:a:liedekef:events_made_easy:*:*:*:*:*:*:*:*, the entire version lineage up to the fixed release is in scope; the fix landed in the 3.2.23 tag (changeset 3748824 versus the 3.2.21 baseline 3723758).
Know when Events Made Easy 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:H/PR:N/UI:N/S:C/C:L/I:L/A:N
Unauthenticated guest submission gives PR:N, but the required non-default dual-setting configuration and entity-encoding bypass justify AC:H; stored XSS in the browser origin gives S:C with C:L/I:L and no availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Events Made Easy plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'event[location_name]' parameter in all versions up to, and including, 3.2.22 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. This vulnerability is only exploitable when both the guest event submission feature (eme_fs[guest_submit]) and forced location creation (eme_fs[force_location_creation]) are explicitly enabled by a site administrator, as both settings default to off.
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.
More in Events Made Easy
View allThe Events Made Easy WordPress plugin before 2.2.81 does not properly sanitise and escape a parameter before using it in
The Events Made Easy WordPress Plugin, version <= 2.3.14 is affected by an authenticated SQL injection vulnerability in
Unauthenticated data overwrite in the Events Made Easy WordPress plugin (all versions before 3.1.4) allows any remote, u
The Events Made Easy WordPress plugin before 2.2.24 does not sanitise and escape Custom Field Names, allowing high privi
Local File Inclusion in Events Made Easy WordPress plugin (all versions through 3.2.5) allows contributor-level authenti
Unauthenticated cross-site scripting in the Events Made Easy WordPress plugin (versions up to and including 3.2.5) allow
Missing authorization in the Events Made Easy plugin for WordPress up to version 3.1.3 permits unauthenticated remote at
The Events Made Easy plugin for WordPress is vulnerable to authorization bypass due to a missing capability check on sev
EUVD-2026-102832
GHSA-98qh-x2j4-35ch
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB