Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconRegister or obtain Subscriber account on target site
-
DeliveryLoad profile.php to harvest the inline nonce
-
ExploitPOST crafted AJAX request to set_options with attacker-controlled bookingWebsiteUrl
-
InstallMalicious URL stored in WordPress options table
-
C2Victim visits any page with booking shortcode
-
ExecuteBrowser automatically loads and executes attacker's embed.js
-
ImpactSession hijack or admin account takeover
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 | Three specific conditions must be simultaneously true for exploitation to succeed. First, the Booking System Trafft plugin must be operating in agency mode - this is the operational configuration that causes the vulnerable nonce to be printed on admin pages accessible to lower-privilege roles; sites not in agency mode are not exploitable regardless of plugin version. Second, the attacker must hold a valid authenticated account at Subscriber level or above - unauthenticated exploitation is blocked because the AJAX handler requires a valid nonce, which is only issued to logged-in sessions; the attacker does not need to perform any privileged administrative action, only submit one AJAX request with the stored nonce. Third, the booking shortcode must be embedded on at least one public-facing page for stored payload delivery to affect visitors. Exploitation is constrained by: the non-default agency mode requirement; the need for an existing authenticated account (requiring open registration or pre-existing access); and the fact that impact is contingent on visitors loading pages with the shortcode. Sites with closed registration and no agency mode requirement face negligible real-world risk. |
| Impact | The CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N scores 6.4, which modestly understates operational risk for affected deployments. The S:C (Scope Changed) metric is the most impactful dimension: a single write by a Subscriber-level attacker poisons the embed-script URL globally, turning every front-end booking page into an XSS delivery vehicle for all visitors including administrators, enabling session hijacking and privilege escalation. The UI:N metric on the attacker side is correct - once the malicious URL is stored, no further attacker interaction is needed; the payload executes passively for every subsequent visitor. No EPSS score was provided in the input data; no CISA KEV listing is present, indicating no confirmed widespread exploitation at time of analysis. No public POC has been identified. The primary real-world risk limiter is the agency mode requirement - sites not operating in agency mode are not vulnerable regardless of version, and sites without open user registration significantly reduce the attacker's ability to obtain a Subscriber account. For sites that do run in agency mode with open registration, this is a genuine high-priority remediation target despite the medium CVSS score. |
| Exploit ScenarioDerived | An attacker registers a free Subscriber-level account on a WordPress site running Booking System Trafft in agency mode, then navigates to profile.php to harvest the nonce printed inline on the page. The attacker submits a POST request to wp-admin/admin-ajax.php with action=set_options and a bookingWebsiteUrl pointing to an attacker-controlled domain hosting a malicious embed.js file. From that moment forward, every site visitor - including administrators - who loads any page containing the booking shortcode automatically fetches and executes the attacker's JavaScript, enabling session cookie theft, keylogging, or administrative account takeover. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 29, 2026
Stored XSS in the Booking System Trafft WordPress plugin (versions up to and including 1.0.17) allows authenticated attackers holding Subscriber-level access to permanently replace the plugin's embed-script origin with an attacker-controlled URL, causing arbitrary JavaScript to execute in every site visitor's browser on any page rendering the booking shortcode. The root cause is a missing capability check on the set_options AJAX handler - the plugin relies solely on a nonce that is printed inline on every WordPress admin page (including profile.php), making it reachable by any logged-in user when the plugin operates in agency mode. No public exploit has been identified at time of analysis, but the persistent site-wide impact - including against administrators - elevates real-world risk significantly beyond what the 6.4 CVSS base score alone conveys.
RemediationAI
No vendor-released patch has been identified at time of analysis - all provided references point exclusively to vulnerable code in version 1.0.17 and trunk, and no fixed release version appears in any reference. WordPress administrators should immediately deactivate the Booking System Trafft plugin until a patched version is published; deactivation removes the vulnerable AJAX handler and eliminates the stored-script injection surface at the cost of losing booking functionality. If deactivation is operationally unacceptable, the most targeted compensating control is to disable agency mode in the plugin settings, which removes the condition under which the vulnerable nonce is exposed to lower-privilege users - the trade-off is loss of multi-staff or agency booking workflows. Additionally, disabling open user registration (Settings > General > Membership) prevents unapproved Subscriber accounts from being created, substantially raising the attacker prerequisite bar. Monitor the WordPress plugin directory (https://wordpress.org/plugins/booking-system-trafft/) and the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/e93060cf-2df3-4d45-a1f2-304f443d58bc for patch availability.
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 Booking System Trafft WordPress plugin by ameliabooking (CPE: cpe:2.3:a:ameliabooking:booking_system_trafft:*:*:*:*:*:*:*:*), confirmed vulnerable through version 1.0.17. The trafftSetOptions() function, registered as the handler for the set_options WordPress AJAX action, validates a nonce to confirm request origin but performs no current_user_can() capability check. WordPress nonces confirm that a specific user submitted a specific form but are not access controls - they cannot substitute for capability checks. Critically, the nonce is printed inline on every admin page, including the low-privilege profile.php screen, making it readable by any authenticated user in agency mode. The handler writes the unsanitized bookingWebsiteUrl input directly into the WordPress options table via update_option('trafft_option', ['bookingWebsiteUrl' => ...]) (trafft.php line ~139/155). The trafftAdminAssets() function (lines ~325 and ~354 in both the 1.0.17 tag and trunk) then enqueues <bookingWebsiteUrl>/embed.js as a trusted script on every front-end page containing the booking shortcode. CWE-79 (Improper Neutralization of Input During Web Page Generation) describes the output-side failure, but the authorization bypass enabling low-privilege write access is the prerequisite that makes exploitation practical.
Know when Booking System Trafft 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:L/UI:N/S:C/C:L/I:L/A:N
Network AJAX endpoint (AV:N), no complexity beyond prerequisites (AC:L), Subscriber-level credential required (PR:L), stored payload fires passively for all visitors (UI:N, S:C), no direct availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Booking System Trafft plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the bookingWebsiteUrl setting in all versions up to, and including, 1.0.17 due to a missing capability check on the set_options AJAX action when the plugin is operating in agency mode. The trafftSetOptions() handler verifies a nonce that is exposed to any authenticated user (it is printed inline on every admin page, including profile.php) but performs no capability check before calling update_option('trafft_option', ['bookingWebsiteUrl' => ...]). This setting is then used by trafftAdminAssets() to enqueue <bookingWebsiteUrl>/embed.js as a script on every front-end page that renders the booking shortcode. This makes it possible for authenticated attackers, with Subscriber-level access and above, to point the embed-script URL at an attacker-controlled origin and execute arbitrary JavaScript in the browser of every site visitor (including admins).
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-50273
GHSA-xr8c-xpp9-8m4h
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB