Skip to main content

Easy!Appointments EUVDEUVD-2026-96923

| CVE-2026-108758 HIGH
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-11 VulnCheck GHSA-q8ph-7hq3-m5wq
8.8
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Reach public booking register endpoint
  2. Exploit
    Enumerate sequential appointment id with self-asserted manage_mode, no hash
  3. Execution
    Rewrite details and rebind to attacker customer
  4. Impact
    Obtain 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

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

easyappointments 0 ≤1.6.0

Affected Packages

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

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

Vendor (VulnCheck) PRIMARY 8.8 HIGH
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
vuln.today AI 8.2 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Low
niche self-hosted open-source PHP appointment scheduler, no broad enterprise footprint
Social Media
2
Sightings
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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2024-57602 CRITICAL POC
9.8 Feb 12

An issue in Alex Tselegidis EasyAppointments v.1.5.0 allows a remote attacker to escalate privileges via the index.php f

CVE-2023-1269 CRITICAL POC
9.8 Mar 08

Use of Hard-coded Credentials in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated critical severi

CVE-2022-0482 CRITICAL POC
9.1 Mar 09

Exposure of Private Personal Information to an Unauthorized Actor in GitHub repository alextselegidis/easyappointments p

CVE-2023-2105 HIGH POC
8.8 Apr 15

Session Fixation in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated high severity (CVSS 8.8), th

CVE-2022-1397 HIGH POC
8.8 May 10

API Privilege Escalation in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated high severity (CVSS

CVE-2025-50383 HIGH POC
8.1 Aug 25

alextselegidis Easy!Appointments v1.5.1 was discovered to contain a SQL injection vulnerability via the order_by paramet

CVE-2026-23622 HIGH POC
7.4 Jan 15

Cross-Site Request Forgery (CSRF) in Easy!Appointments 1.5.2 and earlier allows remote attackers to perform administrati

CVE-2024-57601 MEDIUM POC
6.1 Feb 12

Cross Site Scripting vulnerability in Alex Tselegidis EasyAppointments v.1.5.0 allows a remote attacker to execute arbit

CVE-2023-2104 MEDIUM POC
5.4 Apr 15

Improper Access Control in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium severity (CVSS

CVE-2023-2103 MEDIUM POC
5.4 Apr 15

Cross-site Scripting (XSS) - Stored in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium se

CVE-2019-14936 MEDIUM POC
5.3 Sep 11

Easy!Appointments 1.3.2 plugin for WordPress allows Sensitive Information Disclosure (Username and Password Hash). Rated

CVE-2023-2102 MEDIUM POC
4.8 Apr 15

Cross-site Scripting (XSS) - Stored in GitHub repository alextselegidis/easyappointments prior to 1.5.0. Rated medium se

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy