/

CVE-2026-108758

Severity:

HIGH RISK

(8.2)

Authorization Bypass (CWE-639) in Easy!Appointments

CVE-2026-108758

Deferred

Vulnerability type

Category:

Authorization Bypass

CWE:

CWE-639

Impact:

Unauthorized appointment modification and management

Severity:

HIGH RISK

(8.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Easy!Appointments contains an authorization bypass in the appointment registration flow that may allow unauthenticated users to alter appointments by supplying an appointment identifier without the expected authorization hash. An attacker could enumerate appointment IDs, change appointment and customer details, and obtain management hashes that enable later rescheduling or cancellation.

Easy!Appointments contains an authorization bypass in the appointment registration flow that may allow unauthenticated users to alter appointments by supplying an appointment identifier without the expected authorization hash. An attacker could enumerate appointment IDs, change appointment and customer details, and obtain management hashes that enable later rescheduling or cancellation.

Affected context

The issue occurs in deployments where the Booking::register() flow accepts an appointment ID without reliably requiring and validating its associated authorization hash. Risk is increased when appointment identifiers are predictable and request-controlled flags can influence management behavior before ownership or authorization is established.

The issue occurs in deployments where the Booking::register() flow accepts an appointment ID without reliably requiring and validating its associated authorization hash. Risk is increased when appointment identifiers are predictable and request-controlled flags can influence management behavior before ownership or authorization is established.

Exploit preconditions

  • Attack surface: Public appointment booking or registration endpoints
  • Required access: No authenticated account is generally required
  • Trigger point: A request to the Booking::register() appointment-management flow
  • Required knowledge: A valid or discoverable appointment identifier
  • Why exploitation is possible: Authorization can be bypassed when the appointment ID is accepted without a valid hash, allowing attacker-controlled management parameters to influence updates
  • Attack surface: Public appointment booking or registration endpoints
  • Required access: No authenticated account is generally required
  • Trigger point: A request to the Booking::register() appointment-management flow
  • Required knowledge: A valid or discoverable appointment identifier
  • Why exploitation is possible: Authorization can be bypassed when the appointment ID is accepted without a valid hash, allowing attacker-controlled management parameters to influence updates

Why this happens

The underlying bug is an authorization design failure in which possession of an appointment identifier is treated as sufficient authority to modify the corresponding record. This maps to CWE-639, Authorization Bypass Through User- Controlled Key, because a user-controlled identifier is used to select a protected object without consistently binding the operation to a separately verified authorization token, owner, or authenticated principal.

The underlying bug is an authorization design failure in which possession of an appointment identifier is treated as sufficient authority to modify the corresponding record. This maps to CWE-639, Authorization Bypass Through User- Controlled Key, because a user-controlled identifier is used to select a protected object without consistently binding the operation to a separately verified authorization token, owner, or authenticated principal.

Potential impact

  • An attacker may modify appointment details without authorization
  • Customer records may be rebound to attacker-controlled identities
  • Management hashes could be exposed or generated for unauthorized users
  • Appointments could be rescheduled or canceled
  • Business operations and customer trust could be disrupted
  • An attacker may modify appointment details without authorization
  • Customer records may be rebound to attacker-controlled identities
  • Management hashes could be exposed or generated for unauthorized users
  • Appointments could be rescheduled or canceled
  • Business operations and customer trust could be disrupted

General mitigation guidance

Mitigation generally focuses on enforcing authorization at the point of every

appointment read and write, rather than trusting identifiers or client-

supplied mode flags.

Common defensive patterns include:

  • Requiring a valid, unguessable authorization token or authenticated owner context for each management operation
  • Binding appointment-management credentials to the specific appointment and intended action
  • Rejecting requests when authorization material is absent, malformed, expired, or mismatched
  • Avoiding sequential identifiers as the sole access control mechanism
  • Treating management-mode parameters as non-authoritative client input
  • Applying least privilege to appointment-management services and administrative roles
  • Logging and rate-limiting repeated identifier probing and unauthorized update attempts

Mitigation generally focuses on enforcing authorization at the point of every

appointment read and write, rather than trusting identifiers or client-

supplied mode flags.

Common defensive patterns include:

  • Requiring a valid, unguessable authorization token or authenticated owner context for each management operation
  • Binding appointment-management credentials to the specific appointment and intended action
  • Rejecting requests when authorization material is absent, malformed, expired, or mismatched
  • Avoiding sequential identifiers as the sole access control mechanism
  • Treating management-mode parameters as non-authoritative client input
  • Applying least privilege to appointment-management services and administrative roles
  • Logging and rate-limiting repeated identifier probing and unauthorized update attempts

How teams detect issues like this

Detection approaches may include:

  • Static analysis and code review for database updates selected directly by request-controlled IDs
  • Checks that every appointment mutation performs an explicit ownership or authorization decision
  • Review of code paths where mode flags, hashes, or identifiers are accepted from clients
  • Dynamic tests that attempt access with missing, invalid, mismatched, and reused authorization tokens
  • Monitoring for sequential appointment-ID enumeration, unusual update volume, and management-hash issuance
  • Policy enforcement requiring authorization checks before protected-object mutations

Detection approaches may include:

  • Static analysis and code review for database updates selected directly by request-controlled IDs
  • Checks that every appointment mutation performs an explicit ownership or authorization decision
  • Review of code paths where mode flags, hashes, or identifiers are accepted from clients
  • Dynamic tests that attempt access with missing, invalid, mismatched, and reused authorization tokens
  • Monitoring for sequential appointment-ID enumeration, unusual update volume, and management-hash issuance
  • Policy enforcement requiring authorization checks before protected-object mutations

Sources

SourceLink
github.comgithub.com/alextselegidis/easyappointments
github.comgithub.com/alextselegidis/easyappointments/blob/4bc7ecd51f3dade8e041558f2c23dda65bd6c43e/application/controllers/Booking.php#L368-L587
github.comgithub.com/alextselegidis/easyappointments/commit/09c6fb30b6aac0830a820d6bec3d2eb241daf150
hackmd.iohackmd.io/@haind/easyappointments-booking-register-appointment-takeover
vulncheck.comvulncheck.com/advisories/easy-appointments-through-1.6.0-authorization-bypass-via-booking-register-endpoint

Frequently asked

questions

Yes, the described attack surface is exposed through the application's booking

flow, and exploitation may be possible through unauthenticated web requests

when the affected endpoint is publicly reachable.

An attacker generally needs no authenticated account. They may need to discover

or predict an appointment identifier and reach the relevant registration

endpoint.

Require a separately verified authorization context for every appointment

operation, bind it to the target appointment and requested action, and reject

requests that lack valid authorization.

Use deny-by-default access control, avoid treating object IDs as secrets,

test authorization with missing and mismatched credentials, and monitor for

identifier enumeration and abnormal record changes.

Yes, the described attack surface is exposed through the application's booking

flow, and exploitation may be possible through unauthenticated web requests

when the affected endpoint is publicly reachable.

An attacker generally needs no authenticated account. They may need to discover

or predict an appointment identifier and reach the relevant registration

endpoint.

Require a separately verified authorization context for every appointment

operation, bind it to the target appointment and requested action, and reject

requests that lack valid authorization.

Use deny-by-default access control, avoid treating object IDs as secrets,

test authorization with missing and mismatched credentials, and monitor for

identifier enumeration and abnormal record changes.

Find out what's already
exploitable in your codebase.