| Plugin Name | Booking Calendar |
|---|---|
| Type of Vulnerability | Stored Cross-Site Scripting (Stored XSS) |
| CVE Number | CVE-2025-9346 |
| Urgency | Low |
| CVE Publish Date | 2025-08-27 |
| Source URL | CVE-2025-9346 |
Booking Calendar <= 10.14.1 — Authenticated Stored Cross-Site Scripting (CVE-2025-9346)
A stored cross-site scripting (XSS) vulnerability was disclosed for the Booking Calendar WordPress plugin affecting versions up to and including 10.14.1. The issue is tracked as CVE-2025-9346 and was publicly reported on 27 August 2025. The vendor fixed the issue in Booking Calendar 10.14.2.
This write-up provides a concise technical breakdown, realistic risk scenarios, detection guidance and practical mitigations you can apply immediately. The tone is direct and operational — intended for site owners, developers and hosting teams who must act quickly.
Executive summary (short)
- Vulnerability: Stored Cross-Site Scripting (XSS) in Booking Calendar plugin.
- Affected versions: Booking Calendar <= 10.14.1.
- Fixed in: 10.14.2.
- CVE: CVE-2025-9346 (published 2025-08-27).
- Privilege required: an authenticated user with low privileges (Contributor or higher), depending on site configuration.
- Primary impact: Persistent script injection that executes in the context of privileged users who view the stored entries — enabling account takeover, privilege escalation and persistence.
- Severity: Medium/Low depending on context (public CVSS reported 5.9), but pragmatically still high-risk where contributor registration or guest bookings exist.
- Immediate action: Update to Booking Calendar 10.14.2. If you cannot update immediately, restrict user roles, audit stored booking data and deploy perimeter blocking rules.
What is Stored XSS and why it matters here
Stored XSS occurs when user-supplied input is stored (database or persistent storage) and later rendered without proper escaping. When a privileged user (for example, an administrator) views the stored content, injected JavaScript executes under the site origin. That script can steal session data, perform actions on behalf of the user, or call internal APIs.
In this Booking Calendar instance the plugin accepts booking input — notes, guest details, custom fields — from authenticated users and later renders those inputs in admin interfaces or pages viewed by privileged staff. If input is stored and output is rendered without escaping, a low-privilege user can inject script that executes when an admin inspects the booking.
Why this is dangerous:
- Contributor accounts (commonly allowed on many sites) can be used to inject persistent script.
- Administrators and editors are high-value targets — script executing in their browser can perform privileged actions.
- Stored XSS is persistent and can be exploited at scale without further attacker interaction.
Technical analysis (how the vulnerability works)
Exploit details are intentionally omitted. The following explains the mechanism so defenders can detect and mitigate the risk.
- The plugin exposes a form or endpoint that accepts booking metadata (guest name, email, comments, custom fields).
- Authenticated users submit input which the plugin stores without enforcing proper sanitization.
- When the booking record is viewed (admin UI or other privileged view), the stored value is rendered without escaping for HTML context (for example, output inserted directly into the DOM).
- Injected script executes in the victim’s browser because the origin is trusted — enabling actions such as:
- Reading cookies or tokens (if not HttpOnly).
- Submitting forms or making AJAX calls as the victim to admin-ajax.php or REST endpoints.
- Creating admin users, changing site settings, or installing backdoors via authenticated requests.
- Phishing or exfiltrating data to attacker-controlled endpoints.
Key technical root causes:
- Lack of input validation on fields that accept HTML-like content.
- Lack of output escaping on rendering the stored fields.
- Admin views that render user content in HTML context (innerHTML, unescaped echo).
Affected components and versions
- Plugin: Booking Calendar (WordPress).
- Vulnerable versions: <= 10.14.1.
- Fixed in: 10.14.2.
- CVE: CVE-2025-9346 (published 27 Aug 2025).
If your site runs Booking Calendar 10.14.1 or older, prioritise remediation — particularly if you allow contributor-level accounts or guest bookings.
Exploitation scenarios (realistic threats)
- Contributor → admin escalation: A contributor injects script into a booking note; when an admin views the record, script creates admin accounts or alters settings.
- Persistent front-end compromise: If booking entries are shown in contexts visited by editors/authors, the script can run in those sessions too.
- Mass-targeting editorial teams: Injected payloads can redirect admins to phishing pages to harvest credentials or convince them to install malicious plugins.
- Third-party integrations: Rendered booking content used in dashboards or email previews may cause other systems to process injected HTML/JS.
Note: The attacker must have a user account on the site, but many sites allow self-registration or guest booking submissions, lowering the barrier.
Detection: signs you may be affected
Look for these indicators: