Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain or compromise admin credentials
-
DeliveryInject JS payload into disable_booking_message rich-text field
-
ExploitEnable booking-disabled mode in booking settings
-
ExecutionUnauthenticated visitor loads public booking page
-
ImpactStored XSS payload executes in visitor browser
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 | Two distinct preconditions must both be met for exploitation. First, the attacker must possess or obtain administrator-level credentials for the Easy!Appointments instance - CVSS PR:H confirms this hard requirement; standard user or appointment-manager roles are insufficient. Second, the 'booking disabled' mode must be active in the application settings, which causes the application to serve the |
| Impact | The official CVSS 3.1 base score is 2.6 (Low), driven primarily by PR:H (administrator authentication required to plant the payload), AC:H, and UI:R (the victim must visit the page). The S:C (scope change) correctly captures that the injected payload executes in the browser context of unauthenticated public visitors rather than the administrator. Despite the low raw score, real-world risk is nuanced: a compromised or malicious administrator can silently embed a persistent XSS payload affecting all subsequent visitors to the booking page without any further privileges or interaction from the attacker beyond initial setup. EPSS data was not provided in the source intelligence; the vulnerability is not listed in CISA KEV; and no public exploit code has been identified. The primary limiting factor is the hard PR:H prerequisite, making this a plausible insider threat or post-compromise escalation vector rather than an opportunistic remote attack. For organizations with strict admin account controls and MFA, practical risk is low; for self-hosted deployments with shared or weakly protected credentials, the persistent and zero-interaction-on-attacker-side nature elevates concern. |
| Exploit ScenarioDerived | An attacker holding or having compromised administrator credentials navigates to the booking settings page and enters a JavaScript payload such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 14, 2026
Stored XSS in Easy!Appointments versions prior to 1.6.0 allows an authenticated administrator to inject arbitrary HTML or JavaScript into the 'booking disabled' message field via the booking settings rich-text editor. The unsanitized value is rendered directly to every unauthenticated visitor who opens the public booking page while booking is disabled, crossing a scope boundary from admin context to anonymous public users. No public exploit has been identified at time of analysis; CVSS rates this 2.6 (Low) driven by the administrator-level privilege requirement, though the persistent cross-scope impact on all public visitors is a meaningful secondary risk factor.
RemediationAI
Upgrade to Easy!Appointments version 1.6.0, which resolves the issue by applying pure_html() sanitization both at save time within Booking_settings.php and at render time in the booking_message.php view, as confirmed by commit 629a0415f54f75556c17f4f5d9c77fda1fdbdeae (https://github.com/alextselegidis/easyappointments/commit/629a0415f54f75556c17f4f5d9c77fda1fdbdeae). If an immediate upgrade is not feasible, a targeted compensating control is to keep booking enabled so the vulnerable booking_message view path is never reached - note this has operational impact for organizations that legitimately need to suspend booking. Alternatively, audit and clear the disable_booking_message field directly in the database to eliminate any pre-existing malicious content, and restrict administrative access to MFA-protected, individually-audited accounts to reduce the likelihood of unauthorized payload injection.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Easy!Appointments is a self-hosted PHP/CodeIgniter appointment scheduling web application (CPE: cpe:2.3:a:alextselegidis:easyappointments:*:*:*:*:*:*:*:*). The flaw falls under CWE-79 (Improper Neutralization of Input During Web Page Generation - Cross-site Scripting). The root cause is missing output encoding at both storage and render layers: the disable_booking_message field accepted through a rich-text editor in the Booking_settings controller was stored without HTML sanitization and then rendered in booking_message.php via a bare PHP echo (<?= vars('message_text') ?>), bypassing all encoding. Commit 629a041 confirms the fix: a pure_html() sanitizer was applied at save time inside Booking_settings.php for all fields in the $rich_text_settings whitelist, and a second pure_html() call was added at render time in the view template, implementing defense-in-depth output encoding.
Know when Easyappointments 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:H/UI:R/S:C/C:N/I:L/A:N
PR:H confirmed by admin-only write access; AC:L because once payload is stored any visitor triggers it without further attacker complexity; C:L added since XSS enables content and credential exfiltration in the victim browser session.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Easy!Appointments is a self hosted appointment scheduler. Versions prior to 1.6.0 allow administrators to define a custom "booking disabled" message through the booking settings page. That value is stored in the disable_booking_message setting via a rich-text editor and later passed directly to the public booking_message view without escaping or sanitization. An authenticated administrator can store HTML or JavaScript in this field, enable disabled-booking mode, and trigger stored XSS in every unauthenticated visitor who opens the public booking page. Version 1.6.0 fixes the issue.
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 Easyappointments
View allAn issue in Alex Tselegidis EasyAppointments v.1.5.0 allows a remote attacker to escalate privileges via the index.php f
Use of Hard-coded Credentials in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated critical severi
Exposure of Private Personal Information to an Unauthorized Actor in GitHub repository alextselegidis/easyappointments p
Session Fixation in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated high severity (CVSS 8.8), th
API Privilege Escalation in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated high severity (CVSS
alextselegidis Easy!Appointments v1.5.1 was discovered to contain a SQL injection vulnerability via the order_by paramet
Cross-Site Request Forgery (CSRF) in Easy!Appointments 1.5.2 and earlier allows remote attackers to perform administrati
Broken object-level authorization in Easy!Appointments 1.5.2 lets any authenticated user query the customers search endp
The reschedule endpoint in Easy!Appointments 1.5.2 and earlier exposes the complete customer database record to any part
Cross Site Scripting vulnerability in Alex Tselegidis EasyAppointments v.1.5.0 allows a remote attacker to execute arbit
Improper Access Control in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium severity (CVSS
Cross-site Scripting (XSS) - Stored in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium se
EUVD-2026-43705
GHSA-996f-334j-67g7
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB