/

CVE-2026-16624

Severity:

CRITICAL RISK

(9.6)

Broken Authorization (CWE-639) in Cal.com Team Webhooks

CVE-2026-16624

Awaiting Analysis

Vulnerability type

Category:

Broken Access Control

CWE:

CWE-639

Impact:

Unauthorized Data Access and Exfiltration

Severity:

CRITICAL RISK

(9.6)

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

Cal.com OSS contains a broken authorization flaw in its team webhook creation flow, allowing authenticated users to inject arbitrary teamIds and bind webhooks to teams they do not belong to.

Once a webhook is attached to a victim team, the attacker can receive booking payloads and siphon sensitive data such as organizer and attendee emails, custom form responses, and in some cases video call passwords when bookings are created.

Cal.com OSS contains a broken authorization flaw in its team webhook creation flow, allowing authenticated users to inject arbitrary teamIds and bind webhooks to teams they do not belong to.

Once a webhook is attached to a victim team, the attacker can receive booking payloads and siphon sensitive data such as organizer and attendee emails, custom form responses, and in some cases video call passwords when bookings are created.

Affected context

This vulnerability occurs in deployments where Cal.com is exposed to multiple authenticated users across different teams and where webhook configuration is available through an API or UI.

It manifests specifically in the webhook creation endpoint that accepts a teamId parameter without consistently verifying the caller's membership or authorization for that team.

Environments that rely on webhooks to forward booking events to external systems are particularly affected, as booking payloads can be redirected to attacker-controlled endpoints.

This vulnerability occurs in deployments where Cal.com is exposed to multiple authenticated users across different teams and where webhook configuration is available through an API or UI.

It manifests specifically in the webhook creation endpoint that accepts a teamId parameter without consistently verifying the caller's membership or authorization for that team.

Environments that rely on webhooks to forward booking events to external systems are particularly affected, as booking payloads can be redirected to attacker-controlled endpoints.

Exploit preconditions

  • Attack surface: Cal.com webhook creation API/UI for team resources
  • Required access: Any authenticated user account on the Cal.com instance
  • Trigger point: Submission of a webhook creation request containing a forged or arbitrary teamId value
  • Why exploitation is possible: The backend trusts the provided teamId without enforcing ownership or role checks, so webhooks are created for teams outside the attacker's scope, causing booking events to be delivered to attacker-controlled endpoints
  • Attack surface: Cal.com webhook creation API/UI for team resources
  • Required access: Any authenticated user account on the Cal.com instance
  • Trigger point: Submission of a webhook creation request containing a forged or arbitrary teamId value
  • Why exploitation is possible: The backend trusts the provided teamId without enforcing ownership or role checks, so webhooks are created for teams outside the attacker's scope, causing booking events to be delivered to attacker-controlled endpoints

Why this happens

The root cause is inadequate authorization on a multi-tenant resource operation, mapping directly to CWE-639 (Authorization Bypass Through User-Controlled Key).

The server-side logic accepts a caller-supplied teamId and uses it to associate newly created webhooks with that team, but fails to validate that the requester is a member or administrator of the specified team.

This pattern breaks the expected separation between teams, allowing one tenant to influence another tenant's configuration and consume their event data through improperly guarded indirect object references.

The root cause is inadequate authorization on a multi-tenant resource operation, mapping directly to CWE-639 (Authorization Bypass Through User-Controlled Key).

The server-side logic accepts a caller-supplied teamId and uses it to associate newly created webhooks with that team, but fails to validate that the requester is a member or administrator of the specified team.

This pattern breaks the expected separation between teams, allowing one tenant to influence another tenant's configuration and consume their event data through improperly guarded indirect object references.

Potential impact

  • Attacker may receive booking payloads from victim teams via their own webhook endpoints
  • Attacker could access organizer and attendee email addresses, names, and scheduling metadata
  • Attacker can obtain custom booking responses, potentially including sensitive business or personal information
  • In some configurations, attacker may collect video-call passwords or joining details for scheduled meetings
  • Attacker could aggregate booking data to profile users, perform targeted phishing, or undermine confidentiality agreements
  • Attacker may receive booking payloads from victim teams via their own webhook endpoints
  • Attacker could access organizer and attendee email addresses, names, and scheduling metadata
  • Attacker can obtain custom booking responses, potentially including sensitive business or personal information
  • In some configurations, attacker may collect video-call passwords or joining details for scheduled meetings
  • Attacker could aggregate booking data to profile users, perform targeted phishing, or undermine confidentiality agreements

General mitigation guidance

Effective mitigation focuses on enforcing strict authorization for all operations involving tenant-scoped identifiers and webhook configuration.

Common defensive patterns include:

  • Validating that the authenticated user is a member or has an appropriate role for the team referenced by any teamId in requests
  • Avoiding direct trust of user-provided identifiers; instead derive team context from a session or ownership mapping whenever possible
  • Centralizing access control checks in shared middleware or service layers to reduce inconsistent enforcement
  • Applying least-privilege principles so only designated roles can create or modify webhooks and other data-exfiltration mechanisms
  • Auditing and limiting the sensitive fields included in webhook payloads, especially secrets like meeting passwords

Effective mitigation focuses on enforcing strict authorization for all operations involving tenant-scoped identifiers and webhook configuration.

Common defensive patterns include:

  • Validating that the authenticated user is a member or has an appropriate role for the team referenced by any teamId in requests
  • Avoiding direct trust of user-provided identifiers; instead derive team context from a session or ownership mapping whenever possible
  • Centralizing access control checks in shared middleware or service layers to reduce inconsistent enforcement
  • Applying least-privilege principles so only designated roles can create or modify webhooks and other data-exfiltration mechanisms
  • Auditing and limiting the sensitive fields included in webhook payloads, especially secrets like meeting passwords

How teams detect issues like this

Detection typically involves a mix of code-level and behavioral analysis:

  • Static analysis and manual code review to identify endpoints that accept user-controlled teamId or similar identifiers without explicit authorization checks
  • Verifying that all multi-tenant operations use centralized access control routines rather than custom per-endpoint logic
  • Implementing logging around webhook creation, changes, and unusually broad team associations, then alerting on patterns such as cross-team bindings or high-volume webhook registrations
  • Periodic access control testing, including automated security tests that attempt arbitrary teamId injection to confirm enforcement

Detection typically involves a mix of code-level and behavioral analysis:

  • Static analysis and manual code review to identify endpoints that accept user-controlled teamId or similar identifiers without explicit authorization checks
  • Verifying that all multi-tenant operations use centralized access control routines rather than custom per-endpoint logic
  • Implementing logging around webhook creation, changes, and unusually broad team associations, then alerting on patterns such as cross-team bindings or high-volume webhook registrations
  • Periodic access control testing, including automated security tests that attempt arbitrary teamId injection to confirm enforcement

Sources

SourceLink
github.comgithub.com/calcom/cal.diy/security/advisories/GHSA-4fwh-xxpv-xfm6
vokecyber.comvokecyber.com/research/calcom-cross-tenant-webhook-plant

Frequently asked

questions

Any authenticated user on the affected Cal.com instance can potentially create webhooks for teams they do not belong to, giving them visibility into bookings for those teams. The practical scope depends on how many teams exist and how easily teamIds can be guessed or enumerated.

The attacker needs only a valid user account on the Cal.com deployment; they do not require administrative privileges or membership in the target team. The flaw stems from trusting the user-provided teamId rather than verifying authorization.

The most robust fix is to enforce server-side authorization checks on every operation using teamId or similar tenant identifiers, ensuring that the team context is derived from the authenticated user's memberships or roles rather than from raw request parameters.

Prevention relies on consistent application of access control patterns: centralize authorization logic, avoid exposing direct object references without checks, design APIs around authenticated context instead of caller-supplied identifiers, and regularly test multi-tenant boundaries during security reviews and automated CI checks.

Any authenticated user on the affected Cal.com instance can potentially create webhooks for teams they do not belong to, giving them visibility into bookings for those teams. The practical scope depends on how many teams exist and how easily teamIds can be guessed or enumerated.

The attacker needs only a valid user account on the Cal.com deployment; they do not require administrative privileges or membership in the target team. The flaw stems from trusting the user-provided teamId rather than verifying authorization.

The most robust fix is to enforce server-side authorization checks on every operation using teamId or similar tenant identifiers, ensuring that the team context is derived from the authenticated user's memberships or roles rather than from raw request parameters.

Prevention relies on consistent application of access control patterns: centralize authorization logic, avoid exposing direct object references without checks, design APIs around authenticated context instead of caller-supplied identifiers, and regularly test multi-tenant boundaries during security reviews and automated CI checks.

Find out what's already
exploitable in your codebase.