Skip to main content

Booking System Trafft EUVDEUVD-2026-50273

| CVE-2026-8791 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-07-29 Wordfence GHSA-xr8c-xpp9-8m4h
6.4
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Recon
    Register or obtain Subscriber account on target site
  2. Delivery
    Load profile.php to harvest the inline nonce
  3. Exploit
    POST crafted AJAX request to set_options with attacker-controlled bookingWebsiteUrl
  4. Install
    Malicious URL stored in WordPress options table
  5. C2
    Victim visits any page with booking shortcode
  6. Execute
    Browser automatically loads and executes attacker's embed.js
  7. Impact
    Session 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.

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

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

Alert me

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

Booking System Trafft ≤ 1.0.17

Affected Packages

euvd booking_system_trafft 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 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

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

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/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
Low
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

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

EPSS Score
0.2%
Top 85% exploitable
Prevalence
Low
niche WordPress booking plugin with limited enterprise footprint
Data Quality
5 sources
Confidence: Medium

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.2%
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

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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