CVE-2026-55651: Alextselegidis/easyappointments Easy!Appointments Vulnerable To Appointments Takeover Vulnerability

HIGH
Advisory Identifier: GHSA-4vmm-5qvc-w5p7
CVSS 7.1
CWE-200
Published
Advisory Summary

CVE-2026-55651 is a HIGH (CVSS 7.1) easy!appointments vulnerable to appointments takeover vulnerability (CWE-200: Exposure of Sensitive Information to an Unauthorized Actor) affecting Alextselegidis/easyappointments libraries in the Packagist ecosystem. The issue involves easy!appointments vulnerable to appointments takeover via excessive data exposure. Remediation is available in the latest vendor maintenance releases.

CVE-2026-55651 at a Glance

CVE Identifier CVE-2026-55651
GHSA Identifier GHSA-4vmm-5qvc-w5p7
Severity HIGH
CVSS v3.1 Base Score 7.1
CWE Classification CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
Affected Product Alextselegidis/easyappointments
Package Ecosystem Packagist
Published Date
Last Updated

Security Impact

CVSS: 7.1

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required Low (PR:L)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality Low (C:L)
Integrity High (I:H)
Availability None (A:N)

How to Fix CVE-2026-55651

To remediate this vulnerability, upgrade all affected Alextselegidis/easyappointments dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

alextselegidis/easyappointments fixed: Latest secure release
Upgrade alextselegidis/easyappointments to Latest secure release
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for alextselegidis/easyappointments

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-55651, inspect your project dependencies for Alextselegidis/easyappointments:

inspect dependencies for alextselegidis/easyappointments

Analyze the terminal output to locate any version of Alextselegidis/easyappointments in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than the patched release), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, where the product exposes sensitive information to an actor that is not explicitly authorized to have access to that information. In Alextselegidis/easyappointments, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary An Excessive Data Exposure vulnerability in the customers search endpoint allows an authenticated user to obtain appointment hashes belonging to other users. Using these hashes, an attacker can modify or delete appointments of other providers, resulting in an Appointments Takeover. ### Details The customers search endpoint exposes excessive information, including appointment hashes, to any authenticated user without proper authorization checks. These hashes uniquely identify appointments that do not belong to the searching user. By reusing the obtained hashes, an attacker can interact with appointment management endpoints, allowing the modification or deletion of third-party appointments. The lack of object-level authorization controls leads to an Appointments Takeover, impacting data confidentiality and integrity. ### Impact This vulnerability allows an authenticated user to take control of appointments belonging to other users. By obtaining and reusing the exposed hashes, an attacker can view, modify, or delete appointments of other providers, compromising data integrity and confidentiality. This may result in unauthorized appointment cancellations or modifications, operational disruption of the service. ### PoC 1. Let's start by viewing an appointment with the provider “Jane Doe.” <img width="1912" height="880" alt="image" src="https://github.com/user-attachments/assets/57bc0094-6e7f-4ccc-bde4-5604acd1debd" /> 2. Now, with the provider “test test” (another provider), let's send the request to /customers/search, where we can verify that the customer “Joe Shmoe” is on the list. This makes it possible to extract the hash of the appointment associated with the user Jane Doe, because the response is returning excessive data. <img width="579" height="647" alt="image" src="https://github.com/user-attachments/assets/67897f21-d5a6-4edc-bed7-75c23465290b" /> 3. With this hash, we then go to the endpoint /calendar/reschedule/{hash} with the provider “test test,” where we can check some information about the appointment. <img width="1486" height="917" alt="image" src="https://github.com/user-attachments/assets/29b1c20c-e2a8-483e-bd4d-749fb5de497f" /> 4. By changing the provider to “test test,” it is possible to change the appointment provider. <img width="966" height="982" alt="image" src="https://github.com/user-attachments/assets/cfa17cb2-12ac-4034-aae2-1a626d4d0f9c" /> 5. By saving, we can verify that the appointment is now in the “test test” provider, thus disappearing from the “John Doe” provider calendar. Provider "test test" Calendar: <img width="1916" height="879" alt="image" src="https://github.com/user-attachments/assets/77b9e11a-860f-4c08-847e-fa95c064710d" /> Provider "John Doe" Calendar: <img width="1917" height="880" alt="image" src="https://github.com/user-attachments/assets/d39566f5-a58c-4337-a781-0886faa83c12" /> 5.1. Since we have takeover the appointment, it is possible to cancel/delete it. <img width="1486" height="736" alt="image" src="https://github.com/user-attachments/assets/2a87b9d0-1726-4fdc-af72-7ae9e20cc050" /> <img width="290" height="867" alt="image" src="https://github.com/user-attachments/assets/815b1df6-dfd4-437a-a2bd-e9b61832d5b0" /> ### Recommendation When making the POST request to the /customers/search endpoint, only return appointments that belong to the provider sending the request. This way, the provider does not have access to the random hash and cannot perform the takeover.

CVE-2026-55651 Affected Alextselegidis/easyappointments Versions

1 component(s)
Product / Package Ecosystem Affected Versions Fixed Version
alextselegidis/easyappointments
Packagist
1.5.2
All 1 versions
1.5.2
None specified

References

Frequently Asked Questions

What is CVE-2026-55651?
CVE-2026-55651 is a security vulnerability in Alextselegidis/easyappointments involving Easy!Appointments Vulnerable to Appointments Takeover via Excessive Data Exposure under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor.
Which Alextselegidis/easyappointments versions are affected?
Affected versions include releases prior to current release patches across affected packages: alextselegidis/easyappointments.
What version fixes CVE-2026-55651?
Upgrading to current release patches (or the latest patched release for your respective branch) resolves the vulnerability.
Is alextselegidis/easyappointments affected?
Yes, alextselegidis/easyappointments is affected in releases prior to Latest secure release. Upgrade your dependency to Latest secure release or later.
What is the CVSS score of CVE-2026-55651?
CVE-2026-55651 has a CVSS v3.1 base score of 7.1 (HIGH) with vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N.
What CWE is associated with CVE-2026-55651?
CVE-2026-55651 is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.).
How can I check Packagist dependencies for CVE-2026-55651?
Run the dependency tree command: 'inspect dependencies for alextselegidis/easyappointments'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-4vmm-5qvc-w5p7",
  "modified" : "2026-07-29T16:22:17Z",
  "published" : "2026-07-29T16:22:17Z",
  "aliases" : [ "CVE-2026-55651" ],
  "summary" : "Easy!Appointments Vulnerable to Appointments Takeover via Excessive Data Exposure",
  "details" : "### Summary\nAn Excessive Data Exposure vulnerability in the customers search endpoint allows an authenticated user to obtain appointment hashes belonging to other users.\nUsing these hashes, an attacker can modify or delete appointments of other providers, resulting in an Appointments Takeover.\n\n### Details\nThe customers search endpoint exposes excessive information, including appointment hashes, to any authenticated user without proper authorization checks.\nThese hashes uniquely identify appointments that do not belong to the searching user.\n\nBy reusing the obtained hashes, an attacker can interact with appointment management endpoints, allowing the modification or deletion of third-party appointments.\n\nThe lack of object-level authorization controls leads to an Appointments Takeover, impacting data confidentiality and integrity.\n\n### Impact\nThis vulnerability allows an authenticated user to take control of appointments belonging to other users. By obtaining and reusing the exposed hashes, an attacker can view, modify, or delete appointments of other providers, compromising data integrity and confidentiality. This may result in unauthorized appointment cancellations or modifications, operational disruption of the service.\n\n### PoC\n1. Let's start by viewing an appointment with the provider “Jane Doe.”\n\n<img width=\"1912\" height=\"880\" alt=\"image\" src=\"https://github.com/user-attachments/assets/57bc0094-6e7f-4ccc-bde4-5604acd1debd\" />\n\n2. Now, with the provider “test test” (another provider), let's send the request to /customers/search, where we can verify that the customer “Joe Shmoe” is on the list. This makes it possible to extract the hash of the appointment associated with the user Jane Doe, because the response is returning excessive data.\n\n<img width=\"579\" height=\"647\" alt=\"image\" src=\"https://github.com/user-attachments/assets/67897f21-d5a6-4edc-bed7-75c23465290b\" />\n\n3. With this hash, we then go to the endpoint /calendar/reschedule/{hash} with the provider “test test,” where we can check some information about the appointment.\n\n<img width=\"1486\" height=\"917\" alt=\"image\" src=\"https://github.com/user-attachments/assets/29b1c20c-e2a8-483e-bd4d-749fb5de497f\" />\n\n4. By changing the provider to “test test,” it is possible to change the appointment provider.\n\n<img width=\"966\" height=\"982\" alt=\"image\" src=\"https://github.com/user-attachments/assets/cfa17cb2-12ac-4034-aae2-1a626d4d0f9c\" />\n\n5. By saving, we can verify that the appointment is now in the “test test” provider, thus disappearing from the “John Doe” provider calendar.\n\nProvider \"test test\" Calendar:\n\n<img width=\"1916\" height=\"879\" alt=\"image\" src=\"https://github.com/user-attachments/assets/77b9e11a-860f-4c08-847e-fa95c064710d\" />\n\nProvider \"John Doe\" Calendar:\n\n<img width=\"1917\" height=\"880\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d39566f5-a58c-4337-a781-0886faa83c12\" />\n\n5.1. Since we have takeover the appointment, it is possible to cancel/delete it.\n\n<img width=\"1486\" height=\"736\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2a87b9d0-1726-4fdc-af72-7ae9e20cc050\" />\n\n<img width=\"290\" height=\"867\" alt=\"image\" src=\"https://github.com/user-attachments/assets/815b1df6-dfd4-437a-a2bd-e9b61832d5b0\" />\n\n### Recommendation\nWhen making the POST request to the /customers/search endpoint, only return appointments that belong to the provider sending the request. This way, the provider does not have access to the random hash and cannot perform the takeover.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "alextselegidis/easyappointments"
    },
    "versions" : [ "1.5.2" ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/alextselegidis/easyappointments/security/advisories/GHSA-4vmm-5qvc-w5p7"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-55651"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/alextselegidis/easyappointments/commit/ebbe41130dafa58b0716426c56c8cfd4c22dbceb"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/alextselegidis/easyappointments"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/alextselegidis/easyappointments/releases/tag/1.6.0"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-200" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-07-29T16:22:17Z",
    "nvd_published_at" : "2026-07-14T16:17:00Z"
  }
}