Security Alert Summary
The Booking for Appointments and Events Calendar – Amelia plugin for WordPress (versions up to and including 2.2) is vulnerable to stored cross-site scripting (XSS) via customer name fields. An authentication bypass allows unauthenticated booking submissions, and customer names are rendered into a JavaScript template and inserted via innerHTML without proper HTML entity encoding, enabling script injection that can execute when an administrator views the Calendar page and interacts with the malicious event.
CVE Details
- CVE ID: CVE-2026-6286
- Affected component: Booking for Appointments and Events Calendar – Amelia plugin for WordPress
- Affected versions: Versions up to and including 2.2
- Published: August 28, 2026 at 08:16:41 AM
- Last modified: August 28, 2026 at 03:09:00 PM
- CVSS v3.1: Base Score 7.2, Severity HIGH, Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N - Authentication / privileges / user interaction: Authentication required: None (unauthenticated submission possible); Privileges required: None (PR:N); User interaction: None (UI:N)
- Primary impact: Confidentiality: Low; Integrity: Low; Availability: None
- Weakness: CWE-79 (Improper Neutralization of Input During Web Page Generation – Cross-site Scripting)
Technical Details
This vulnerability is a stored cross-site scripting issue in the Amelia booking plugin where customer name fields can contain characters that break out of an attribute in a rendered JavaScript template. The root causes described are:
- An authentication bypass: the
AddBookingCommandexplicitly skips nonce verification (Command.phpline 186), allowing unauthenticated users to submit booking data. - Insufficient output encoding: the plugin applies
sanitize_text_field()to customerfirstNameandlastNamefields (BookingApplicationService.phplines 302-308). This function removes HTML tags but preserves special characters such as double quotes, which are significant in HTML/JavaScript contexts. - Unsafe client-side rendering: the administrative Calendar view uses a FullCalendar
eventContentcallback that interpolates customer names directly into JavaScript template literals (referenced inredesign/dist/index.jsline 199) and then inserts the result usinginnerHTMLwithout HTML entity encoding.
Because double quotes are preserved by server-side sanitization, an attacker can inject strings like ‘” onmouseover=”alert(document.cookie)”‘ to break out of an attribute and introduce event handlers. These injected scripts are stored in the booking record and execute in an administrator’s browser when the Calendar page is viewed and the malicious event is hovered.
How This Could Impact Your Website
Consider a site with multiple users: a site owner, internal staff who manage bookings, and external contractors or customers who can create appointments. An unauthenticated attacker could submit a booking with a crafted customer name that contains a payload. When an administrative user opens the Calendar and hovers over the malicious appointment, the injected script can run in the administrator’s browser context.
- Exposure of administrative session data or values accessible to JavaScript could occur, consistent with the reported confidentiality impact.
- Attackers could perform actions in the admin user’s browser or modify displayed data, aligning with the reported integrity impact.
- Such an issue increases the risk of targeted phishing or social engineering against staff whose contact information appears in booking records.
If youre unsure whether your site is affected or how to assess your current user roles and plugins, it may be worth having a professional review.
Recommended Actions
- Update the affected plugin as soon as a patched version is available.
- Review and reduce unnecessary user roles and privileges, especially contributor-level or public submission capabilities.
- Enforce strong passwords and enable two-factor authentication for editors and administrators.
- Remove unused or unmaintained plugins to reduce attack surface.
- Monitor site activity and administrative logins for unusual behavior or unexpected booking entries.
If youd like help reviewing your plugins, user roles, or overall WordPress security posture, our team at Freshy is happy to help.
References
- https://plugins.trac.wordpress.org/browser/ameliabooking/tags/2.1.3/redesign/dist/index.js#L199
- https://plugins.trac.wordpress.org/browser/ameliabooking/tags/2.1.3/src/Application/Commands/Booking/Appointment/AddBookingCommandHandler.php#L46
- https://plugins.trac.wordpress.org/browser/ameliabooking/tags/2.1.3/src/Application/Commands/Command.php#L186
- https://plugins.trac.wordpress.org/browser/ameliabooking/tags/2.1.3/src/Application/Services/Booking/BookingApplicationService.php#L302
- https://plugins.trac.wordpress.org/browser/ameliabooking/trunk/redesign/dist/index.js#L199
- https://plugins.trac.wordpress.org/browser/ameliabooking/trunk/src/Application/Commands/Booking/Appointment/AddBookingCommandHandler.php#L46
- https://plugins.trac.wordpress.org/browser/ameliabooking/trunk/src/Application/Commands/Command.php#L186
- https://plugins.trac.wordpress.org/browser/ameliabooking/trunk/src/Application/Services/Booking/BookingApplicationService.php#L302
- https://plugins.trac.wordpress.org/changeset/3499608/
- https://plugins.trac.wordpress.org/changeset/3505826/
- https://www.wordfence.com/threat-intel/vulnerabilities/id/a330336e-82ad-41f4-b1b1-d93d9905aabd?source=cve