Skip to main content

cal.diy EUVDEUVD-2026-91160

| CVE-2026-104054 LOW
Missing Authorization (CWE-862)
2026-10-02 cna@vuldb.com GHSA-48q5-8whv-r6xj
2.1
CVSS 4.0 · Vendor: vuldb
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with low-privilege account
  2. Exploit
    Request another user's/team's booking resource
  3. Execution
    Stubbed PermissionCheckService returns true
  4. Impact
    Read or modify unauthorized booking data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a valid authenticated low-privilege session on the cal.diy instance (CVSS PR:L); it is NOT unauthenticated. Given that, no further special configuration is needed because the PBAC PermissionCheckService stub unconditionally returns true for checkPermission/hasPermission in default builds up to 6.2.0, so doesUserIdHaveAccessToBooking in BookingAccessService.ts grants access to bookings the user does not own. Exploitation is remote (AV:N), low-complexity (AC:L), and needs no user interaction (UI:N). Limiting factors: the attacker must hold an account on the target instance; impact per request is low (VC:L/VI:L/VA:L); affected versions are ≤6.2.0; and no merged patch yet exists, so defenders cannot remediate by upgrade until PR #30253 is accepted.

Impact

The vuldb CNA assigns a CVSS 4.0 base score of 2.1 (Low) with vector AV:N/AC:L/AT:N/PR:L/UI:N and uniformly low impacts (VC:L/VI:L/VA:L), plus E:P (Proof-of-Concept exploit maturity), which is consistent with the description's claim that exploit code has been released publicly. No EPSS probability and no CISA KEV status were provided in the input, so there is no signal of widespread or confirmed active exploitation - exploitation status here is 'publicly available exploit code exists', which is distinct from active in-the-wild use. On raw CVSS this looks like a low-priority, authenticated-only issue. However, the GitHub source-code evidence materially sharpens the picture: the PBAC Permission Engine's PermissionCheckService was a placeholder stub whose checkPermission()/hasPermission() methods unconditionally 'return true' and getTeamIdsWithPermission() returns [], and this stub was duplicated across several components (BookingAccessService.ts, getEventTypesByViewer.ts, getPublicEvent.ts, and the watchlist container). This is a genuine broken-access-control defect, not a theoretical one - authorization was effectively a no-op for any authenticated caller. The low vendor-assigned C/I/A impacts (VC:L/VI:L/VA:L) may UNDERSTATE the real breadth, since a permission engine that always returns true could expose or allow modification of bookings/event-types beyond a single resource - verify actual data exposure against the affected components. Net: a credible, easily-exploitable authorization bypass for authenticated users, but mitigated by the authentication requirement (PR:L), low per-request impact, and the absence of KEV/EPSS evidence of mass exploitation. Note also that no fix is merged yet (the PR awaits acceptance), so there is currently no confirmed patched version.

Exploit ScenarioDerived

A low-privilege authenticated user of a cal.diy instance (≤6.2.0) sends a normal API request for a booking belonging to another user or team. Because the PBAC PermissionCheckService is a stub that always returns true, the doesUserIdHaveAccessToBooking check in BookingAccessService.ts passes regardless of actual entitlement, letting the attacker read or manipulate bookings they should not access. Public exploit code is reported to exist, and the network/low-complexity vector means the request requires only a valid logged-in session and no user interaction.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 02, 2026

Missing authorization in the cal.diy (Cal.com) PBAC Permission Engine lets any authenticated low-privilege user read and modify bookings that do not belong to them, because the doesUserIdHaveAccessToBooking function in BookingAccessService.ts relies on a PermissionCheckService whose permission checks were replaced by stubs that unconditionally return true. All builds up to and including 6.2.0 are affected, and publicly available exploit code exists, though the CNA-assigned CVSS 4.0 base score is only 2.1 (Low) because per-request confidentiality, integrity and availability impact is limited and a valid account on the target instance is required. No patched release is available yet: the fix is proposed in pull request #30253, which is still awaiting acceptance, so defenders cannot remediate by upgrading at time of analysis.

RemediationAI

No vendor-released patched version exists at time of analysis; the upstream fix is proposed in pull request https://github.com/calcom/cal.diy/pull/30253, which is still awaiting acceptance, so an upgrade path is not yet available and the fix should be treated as 'Upstream fix available (PR/commit); released patched version not independently confirmed'. Operators who can run a fork or custom image should review and cherry-pick that PR, which deletes the stubbed PermissionCheckService classes in BookingAccessService.ts, watchlist.ts, getEventTypesByViewer.ts and getPublicEvent.ts, imports the real service from @calcom/features/permissions/services/PermissionCheckService, and adds PrismaPermissionMembershipRepository for tiered team-role verification; the trade-off is that an unmerged, unaccepted PR may change before release and should be validated against the added unit tests rather than deployed blindly. If the application cannot be patched, compensating controls should focus on the fact that exploitation requires a valid authenticated account: disable self-service signup and pending invitations so only vetted users hold sessions, tighten instance exposure (VPN, SSO gate, IP allowlist) so unauthenticated remote users cannot even obtain the required account, and reduce the blast radius by restricting which users can create or manage bookings in shared teams. Because the flaw permits reading and altering bookings the actor does not own, run an audit of booking records and access logs for unexpected cross-user reads or modifications, and monitor the doesUserIdHaveAccessToBooking code path for anomalous access until the code is replaced. None of these controls removes the underlying missing authorization check, so they should be considered temporary until PR #30253 is accepted and shipped in an official release.

Affected VersionsENISA

cal.diy 6.0
cal.diy 6.1
cal.diy 6.2.0

Affected Packages

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

cal.diy implements policy-based access control (PBAC) through a PermissionCheckService that downstream services consult before returning or mutating booking data. In affected builds, at least four modules - BookingAccessService.ts, the watchlist DI container, getEventTypesByViewer.ts and getPublicEvent.ts - each declared a local stub class named PermissionCheckService whose checkPermission() and hasPermission() methods returned true and whose getTeamIdsWithPermission() returned an empty array regardless of arguments. The stubbed class was being injected in place of the real implementation, so every authorization question answered 'yes' and the PBAC layer effectively became allow-all. This is a classic CWE-862 Missing Authorization condition rather than a memory-safety or injection bug: the security decision is present in the code path but is answered by a permissive placeholder. The proposed fix (PR #30253) removes the stubs and imports the genuine PermissionCheckService from @calcom/features/permissions/services, adding a new PrismaPermissionMembershipRepository that verifies the user holds an accepted MembershipRole on the relevant team and walks the parent/child team hierarchy via findParentTeamId, findChildTeamIds, hasAcceptedMembershipWithRole and findTeamIdsWithAcceptedRole. The accompanying unit tests (PermissionCheckService.test.ts) validate that members without the required role, unaccepted memberships, and unrelated teams are correctly denied, confirming that the missing check was the root cause.

Know when the next one hits your stack

  • 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 (vuldb) PRIMARY 2.1 LOW
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
vuln.today AI 5.4 MEDIUM

Authenticated account needed so PR:L; stubbed checks let a user read and modify others' bookings (C:L/I:L); no clear availability impact (A:N); remote, low-complexity, no UI.

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

Primary rating from Vendor (vuldb).

CVSS VectorVendor: vuldb

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

DescriptionCVE.org

A security flaw has been discovered in calcom cal.diy up to 6.2.0. This affects the function doesUserIdHaveAccessToBooking of the file BookingAccessService.ts of the component PBAC Permission Engine. Performing a manipulation results in missing authorization. The attack can be initiated remotely. The exploit has been released to the public and may be used for attacks. The pull request to fix this issue awaits acceptance.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
niche self-hosted scheduling product in the Cal.com family, limited enterprise footprint
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment 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 No
EPSS 0.2%
Patch available No
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
Defer
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

10
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
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.

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