Easy!Appointments: Authorization bypass in Google OAuth provider binding lets any backend user rebind a peer provider's Google sync
Easy!Appointments is a self hosted appointment scheduler. In versions prior to 1.6.0, `Google::oauth` at `application/controllers/Google.php:278` stores its URL-supplied `provider_id` in the session, and `oauth_callback` saves the issued Google OAuth token against that row without checking the caller owns the provider. Any logged-in backend user (admin, provider, or secretary) rebinds a peer provider's Google sync to a Google account they control. The peer's appointments then sync into the attacker's calendar with each customer's name and email attached as attendee data. Version 1.6.0 patches the issue.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-52841
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 14:23 UTC · Revision 1
Source evidence
Easy!Appointments: Authorization bypass in Google OAuth provider binding lets any backend user rebind a peer provider's Google sync
core-osv · Original sourcePublished 14 Jul 2026, 15:27 UTC
Easy!Appointments is a self hosted appointment scheduler. In versions prior to 1.6.0, `Google::oauth` at `application/controllers/Google.php:278` stores its URL-supplied `provider_id` in the session, and `oauth_callback` saves the issued Google OAuth token against that row without checking the caller owns the provider. Any logged-in backend user (admin, provider, or secretary) rebinds a peer provider's Google sync to a Google account they control. The peer's appointments then sync into the attacker's calendar with each customer's name and email attached as attendee data. Version 1.6.0 patches the issue.
osv:CVE-2026-52841
Complete source record
{
"id": "c639445300287c017af62d84a7b0180dda9653f288c8b889570887b0540fc334",
"url": "https://osv.dev/vulnerability/CVE-2026-52841",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Easy!Appointments: Authorization bypass in Google OAuth provider binding lets any backend user rebind a peer provider's Google sync",
"summary": "Easy!Appointments is a self hosted appointment scheduler. In versions prior to 1.6.0, `Google::oauth` at `application/controllers/Google.php:278` stores its URL-supplied `provider_id` in the session, and `oauth_callback` saves the issued Google OAuth token against that row without checking the caller owns the provider. Any logged-in backend user (admin, provider, or secretary) rebinds a peer provider's Google sync to a Google account they control. The peer's appointments then sync into the attacker's calendar with each customer's name and email attached as attendee data. Version 1.6.0 patches the issue.",
"evidence": "osv:CVE-2026-52841",
"products": [],
"severity": "low",
"structured": {
"id": "CVE-2026-52841",
"aliases": [
"CVE-2026-52841",
"GHSA-8hm4-r66f-29wr"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/alextselegidis/easyappointments",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "4bc7ecd51f3dade8e041558f2c23dda65bd6c43e"
},
{
"fixed": "4b2d245d2cd2058dc76e05f6eb65b26699268471"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "1.6.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "4b2d245d2cd2058dc76e05f6eb65b26699268471"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
}
],
"versions": [
"1.6.0-beta.2",
"1.6.0-beta.1",
"1.6.0-alpha.1",
"1.5.2-beta.1",
"1.5.1",
"1.5.1-beta.1",
"1.5.0",
"1.5.0-beta.1",
"1.5.0-alpha.1",
"1.5.0-dev.4",
"1.5.0-dev.3",
"1.5.0-dev.2",
"1.5.0-dev.1",
"1.3.0-beta.2",
"1.3.0-beta.1",
"1.3.0-alpha.1",
"1.2.0-beta.1",
"1.2.0-alpha.1",
"1.1.0",
"1.1.0-beta.2"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-52841.json"
}
}
],
"modified": "2026-10-28T02:30:29.355077104Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/52xxx/CVE-2026-52841.json",
"https://github.com/alextselegidis/easyappointments/security/advisories/GHSA-8hm4-r66f-29wr",
"https://nvd.nist.gov/vuln/detail/CVE-2026-52841",
"https://github.com/alextselegidis/easyappointments/commit/4b2d245d2cd2058dc76e05f6eb65b26699268471"
],
"provider_metadata": {
"cwe_ids": [
"CWE-639"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/52xxx/CVE-2026-52841.json"
}
},
"related_cves": [
{
"value": "CVE-2026-52841",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 496340,
"published_at": "2026-07-14T15:27:50.367+00:00"
}