Skip to main content

Easy!Appointments CVE-2026-52839

| EUVDEUVD-2026-43720 LOW
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-07-14 GitHub_M GHSA-w8xc-8g92-v77h
3.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Recon
    Obtain provider-role credentials
  2. Delivery
    Authenticate to Easy!Appointments API
  3. Exploit
    Enumerate peer provider numeric IDs via scheduling UI
  4. Install
    Craft POST body with foreign id_users_provider
  5. C2
    Submit to /appointments/store or /appointments/update
  6. Execute
    Unauthorized appointment committed to database despite error response
  7. Impact
    Victim provider's schedule silently manipulated

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

Exploitation requires a valid authenticated provider-role account within the target Easy!Appointments instance - unauthenticated external attackers cannot exploit this directly. The instance must be running any version prior to 1.6.0. Single-provider deployments have no peer provider to target and are not meaningfully affected; multi-provider instances (clinics, booking platforms, shared scheduling tools) are the realistic attack surface. No non-default configuration is required beyond the presence of more than one registered provider account. The write-before-crash variant on store means the attacker does not need a successful HTTP 200 response to confirm persistence - an HTTP 500 error may accompany a fully committed unauthorized record. Exploitation is limited by the need for provider-role credentials and knowledge of a peer provider's numeric ID.

Impact

The assigned CVSS 3.1 score of 3.3 (AV:N/AC:H/PR:H) materially underestimates exploitability. The description explicitly states 'a normal authenticated provider' is the threat actor, which maps to PR:L, not PR:H; and the attack requires only substituting a numeric provider ID in an API parameter - a trivially low-complexity operation, not AC:H. A corrected assessment places this at approximately CVSS 5.3 (Medium). No EPSS data was available for this CVE, and KEV status is not confirmed. The practical blast radius is limited to multi-provider deployments: a clinic, salon, or service business where competing providers share the same instance is the realistic threat model. In that context, schedule injection between peers could enable business disruption, privacy violations between providers, or appointment-booking fraud. The write-before-crash variant on store also complicates detection because error log analysis alone will not reveal successful persistence.

Exploit ScenarioDerived

An attacker holding a valid Easy!Appointments provider account enumerates the numeric IDs of peer providers (discoverable via scheduling UI or API), then posts a crafted JSON body to /appointments/store with a substituted id_users_provider referencing the target. The database commits the unauthorized appointment row before the controller crashes, so the victim provider's calendar is modified while the attacker receives only an HTTP error - making the attack look like a failed request in access logs. No public exploit code has been identified at time of analysis.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jul 14, 2026

Horizontal privilege escalation in Easy!Appointments prior to 1.6.0 permits any authenticated provider to inject appointments into a peer provider's calendar or reassign existing appointments across provider boundaries by supplying an arbitrary id_users_provider value to the store and update API endpoints. The asymmetry is stark: the search endpoint correctly enforces provider-scoped filtering, confirming the isolation boundary was intentionally designed - making this an incomplete implementation rather than a missing feature. An additional write-before-crash defect on the store path means the unauthorized database row is silently persisted even when the attacker receives an HTTP error response. No active exploitation is confirmed (not in CISA KEV) and no public exploit code has been identified at time of analysis.

RemediationAI

Upgrade to Easy!Appointments version 1.6.0, which patches the provider authorization bypass per the vendor security advisory at https://github.com/alextselegidis/easyappointments/security/advisories/GHSA-w8xc-8g92-v77h; the fix is tracked in commit 4abb10545d83ac1a57d03f6502376ee67696ee7c. If an immediate upgrade is not feasible, restrict provider account registration to fully trusted internal personnel, as exploitation requires a valid provider-role credential - removing untrusted provider accounts eliminates the attack surface entirely. As a detection compensating control, query the database directly for appointments where the id_users_provider value does not match the account that submitted the booking, rather than relying on HTTP error logs, since the write-before-crash defect means unauthorized rows persist despite error responses. WAF rules blocking id_users_provider parameter substitution on the store and update endpoints are possible but require session-aware logic tied to the application's provider ID mapping, which is complex to implement correctly without application-layer access.

Affected VersionsENISA

easyappointments < 1.6.0

Affected Packages

composer alextselegidis/easyappointments fix: 1.6.0
euvd easyappointments fix: 1.6.0

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

CWE-639 (Authorization Bypass Through User-Controlled Key) is the root cause: the application exposes the internal relational key id_users_provider directly in user-controlled API request bodies for appointments/store and appointments/update, then validates only generic appointment-write privileges without confirming the submitted key is owned by the authenticated session. This is a textbook Insecure Direct Object Reference (IDOR) applied to a horizontal privilege boundary between peer provider accounts. CPE cpe:2.3:a:alextselegidis:easyappointments:*:*:*:*:*:*:*:* covers all pre-1.6.0 releases. The write-before-crash defect arises because the CodeIgniter-based controller layer commits the ORM row to the database before a downstream type error terminates execution, producing a persisted unauthorized record with no successful HTTP response to the caller - a particularly dangerous combination for detection.

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 (GitHub_M) PRIMARY 3.3 LOW
AV:N/AC:H/PR:H/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 4.3 MEDIUM

Any normal provider account can exploit this with a simple parameter substitution (AC:L, PR:L); impact is integrity-only - no confidentiality or availability loss described.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
High
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Jul 14, 2026 - 18:20 EUVD

DescriptionCVE.org

Easy!Appointments is a self hosted appointment scheduler. Versions prior to 1.6.0 correctly filter provider-scoped appointments in the appointments/search response, proving that provider isolation is an intended security boundary. However, the direct mutation endpoints appointments/store and appointments/update only check generic appointment privileges and never verify that the submitted id_users_provider belongs to the current session. A normal authenticated provider can inject new appointments into another provider's schedule via store, or reassign existing appointments into a foreign provider's calendar via update. The store path contains an additional write-before-crash bug: the unauthorized row is committed to the database before the controller crashes on a type error, so the attacker receives an error response while the foreign appointment is already persisted. Version 1.6.0 patches the issue.

Threat Intelligence Overview

EPSS Score
0.1%
Top 96% exploitable
Prevalence
Low
niche self-hosted open-source appointment scheduler, limited enterprise footprint
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub VulDB

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 LOW
CISA KEV No
Public POC Yes
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +16
PoC: +20
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-2026-55651 HIGH POC
7.1 Jul 14

Broken object-level authorization in Easy!Appointments 1.5.2 lets any authenticated user query the customers search endp

CVE-2026-52837 MEDIUM POC
6.9 Jul 14

The reschedule endpoint in Easy!Appointments 1.5.2 and earlier exposes the complete customer database record to any part

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

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