Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach public booking register endpoint
-
ExploitEnumerate sequential appointment id with self-asserted manage_mode, no hash
-
ExecutionRewrite details and rebind to attacker customer
-
ImpactObtain management hash to reschedule or cancel
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | No special configuration is required: the Booking::register() endpoint is public and unauthenticated by design (it is the customer-facing booking flow), so default deployments of Easy!Appointments through 1.6.0 are exploitable. The concrete prerequisite is that target appointments already exist, since the attacker supplies an existing appointment id together with a self-asserted manage_mode flag and omits the appointment_hash that the fixed version now mandates. The only practical limiting factors are that appointment IDs are sequential integers (making enumeration trivial rather than a true obstacle) and that the instance must be running version 1.6.0 or earlier; the patched release rejects updates lacking a valid hash. No user interaction, authentication, or non-default setting limits exploitation. |
| Impact | This is a genuine priority, not merely a high-CVSS paper tiger. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes a network-reachable, low-complexity flaw requiring no authentication and no user interaction - fully consistent with the description of an unauthenticated IDOR in the public Booking::register() endpoint. The CWE-639 (authorization bypass via user-controlled key) and the vendor's own changelog ('unauthenticated IDOR vulnerability ... arbitrary appointment takeover') corroborate the vector, so the signals are internally consistent rather than conflicting. The vulnerable-system impact is correctly weighted toward integrity (VI:H - attackers rewrite/rebind appointments) with low confidentiality (VC:L - management hashes and appointment details are disclosed) and no availability impact (VA:N). Key exploitation enablers raising real-world risk: appointment IDs are sequential and enumerable, and the manage_mode flag is self-asserted by the client, so exploitation is trivially scriptable and automatable across all existing appointments. Mitigating the urgency: EPSS is NOT provided in the input, and KEV status is absent (not in CISA KEV), so there is no evidence of active mass exploitation yet - the risk is currently assessed from exploitability, not observed attacks. A detailed public technical write-up (hackmd) and VulnCheck advisory exist, lowering the barrier to weaponization even though no packaged exploit flag is set in the input. |
| Exploit ScenarioDerived | An unauthenticated attacker sends crafted requests to the public Easy!Appointments Booking::register() endpoint, iterating through sequential appointment IDs while setting a self-asserted manage_mode flag and omitting the appointment hash. Because the pre-patch code never validated the hash, the attacker rewrites each appointment's details, rebinds it to an attacker-controlled customer, and harvests the returned management hash - enabling arbitrary rescheduling or cancellation. A detailed public technical write-up exists (hackmd), making exploitation straightforward to reproduce, though no packaged exploit tool is confirmed in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 11, 2026
Unauthenticated appointment takeover in Easy!Appointments 1.6.0 and earlier allows any remote attacker to rewrite, rebind, reschedule, or cancel arbitrary existing bookings by calling the public Booking::register() endpoint with a sequential appointment id and a self-asserted manage_mode flag while omitting the appointment management hash. Successful abuse also yields the victim's management hash, its update endpoint is reachable at PR:N/UI:N, and the flaw carries an assessed impact of high integrity loss, making it a genuine priority rather than a high-CVSS paper tiger; no public exploit identified at time of analysis, although a public technical write-up of the flaw exists, and no EPSS score was supplied in the available data.
RemediationAI
The upstream fix is committed in https://github.com/alextselegidis/easyappointments/commit/09c6fb30b6aac0830a820d6bec3d2eb241daf150, which enforces appointment-hash verification on manage_mode updates and strips client-supplied appointment ids outside manage mode; patch availability is confirmed per the vendor/VulnCheck advisory, but a specific patched release version number was not provided in the available data, so upgrade to the earliest release containing that commit (or deploy the commit directly) rather than assuming a fixed tag exists. Where immediate upgrading is not possible, apply targeted compensating controls: place a reverse-proxy or WAF rule in front of the Booking::register() route that rejects any request carrying manage_mode together with an appointment id unless a valid appointment_hash parameter is also present, which mirrors the upstream check and blocks the exact bypass primitive while leaving normal first-time bookings working; alternatively, temporarily disable or restrict public access to the booking/registration endpoint until patched, accepting the business trade-off that customers cannot self-book online. Because appointment ids are sequential integers, attackers can enumerate at scale, so add rate limiting and alerting on bursts of register() calls with varying ids or repeated manage_mode submissions from one source, and treat any such pattern as a likely takeover attempt. Finally, since successful exploitation discloses management hashes, rotate or invalidate the hash values of all existing appointments and audit upcoming bookings for unexpected customer rebinding, rescheduling, or cancellation before and after the fix is deployed. Reference advisories: https://www.vulncheck.com/advisories/easy-appointments-through-1.6.0-authorization-bypass-via-booking-register-endpoint and https://hackmd.io/@haind/easyappointments-booking-register-appointment-takeover.
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
Easy!Appointments is a PHP/CodeIgniter scheduling and booking application by Alex Tselegidis. The vulnerable code path is the customer-facing Booking::register() controller action (application/controllers/Booking.php, roughly lines 368-587), which handles both first-time bookings and edits to existing ones. Normally, editing an existing appointment is gated by a secret per-appointment management hash; the controller accepts a client-supplied manage_mode flag but, in versions through 1.6.0, never validated that the supplied appointment id actually belongs to the caller or that the accompanying hash matched the record. This is a classic CWE-639 (Authorization Bypass Through User-Controlled Key), i.e. an insecure direct object reference: the authorization decision rests entirely on an attacker-controllable identifier (the appointment id) instead of on a server-side ownership check. The upstream fix (commit 09c6fb30b6aac0830a820d6bec3d2eb241daf150) adds two guards: when manage_mode is set and an id is present it requires a non-empty appointment_hash and verifies it against the stored record, throwing if the lookup fails; and when manage_mode is absent it strips any client-supplied appointment id so new bookings cannot target existing rows. The CHANGELOG entry for that commit describes it as a "unauthenticated IDOR vulnerability in Booking::register() that allowed arbitrary appointment takeover by validating appointment hash before allowing updates." The affected CPE is the wildcard cpe:2.3:a:alextselegidis:easyappointments:*:*:*:*:*:*:*:*, covering all releases up to and including 1.6.0.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N
Public unauthenticated endpoint with no interaction gives AV:N/AC:L/PR:N/UI:N; integrity is high (arbitrary appointment rewrite/rebind), confidentiality low (hash/detail disclosure), no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Easy!Appointments through 1.6.0 contains an authorization bypass vulnerability in Booking::register() that allows unauthenticated attackers to modify any appointment by supplying an appointment id without its hash. Attackers can enumerate sequential appointment ids with a self-asserted manage_mode flag to rewrite appointment details, rebind them to attacker-controlled customers, and obtain management hashes for rescheduling or cancellation.
Executive ViewAI
Easy!Appointments deployments at version 1.6.0 or earlier expose organizations to remote tampering with customer bookings, including unauthorized rescheduling, rebinding, or cancellation. Because the issue affects public booking workflows and can expose appointment management data, it can disrupt service delivery, erode customer trust, and create privacy and operational risk. A vendor patch is available, so leadership should prioritize patching internet-facing instances and verifying that no unauthorized booking changes have occurred.
Apply vendor patch.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
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
Easy!Appointments 1.3.2 plugin for WordPress allows Sensitive Information Disclosure (Username and Password Hash). Rated
Cross-site Scripting (XSS) - Stored in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium se
EUVD-2026-96923
GHSA-q8ph-7hq3-m5wq
NVD
CVE.org
EPSS
Exploit-DB