/

CVE-2026-104978

Severity:

HIGH RISK

(8.2)

Broken Access Control (CWE-863) in Plane Invitations

CVE-2026-104978

Deferred

Vulnerability type

Category:

Broken Access Control

CWE:

CWE-863

Impact:

Unauthorized Workspace and Project Access

Severity:

HIGH RISK

(8.2)

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

A broken access control vulnerability in Plane allows authenticated users to enumerate project invitations and, in certain cases, join a workspace and project intended for another person. The issue becomes risky when an invitation targets an unregistered email address and Plane does not require mailbox verification before account registration and invitation acceptance.

A broken access control vulnerability in Plane allows authenticated users to enumerate project invitations and, in certain cases, join a workspace and project intended for another person. The issue becomes risky when an invitation targets an unregistered email address and Plane does not require mailbox verification before account registration and invitation acceptance.

Affected context

The vulnerability occurs in Plane deployments where:

  • Authenticated users can reach the project invitation list endpoint with a known workspace slug and project ID
  • Invitation acceptance is based primarily on a submitted email address
  • New accounts can be registered with invited email addresses without verifying mailbox ownership
  • Pending invitations can consequently be associated with an attacker-controlled account

The vulnerability occurs in Plane deployments where:

  • Authenticated users can reach the project invitation list endpoint with a known workspace slug and project ID
  • Invitation acceptance is based primarily on a submitted email address
  • New accounts can be registered with invited email addresses without verifying mailbox ownership
  • Pending invitations can consequently be associated with an attacker-controlled account

Exploit preconditions

  • Attack surface: Authenticated project invitation and public invitation-join endpoints
  • Required access: A valid Plane account, knowledge of the workspace slug and project ID, and the ability to register an account
  • Trigger point: Enumeration of a pending invitation followed by account registration and invitation acceptance
  • Why exploitation is possible: Authorization is not sufficiently bound to verified control of the invited email address or to the intended recipient identity
  • Attack surface: Authenticated project invitation and public invitation-join endpoints
  • Required access: A valid Plane account, knowledge of the workspace slug and project ID, and the ability to register an account
  • Trigger point: Enumeration of a pending invitation followed by account registration and invitation acceptance
  • Why exploitation is possible: Authorization is not sufficiently bound to verified control of the invited email address or to the intended recipient identity

Why this happens

The underlying bug is an authorization failure in invitation handling, mapping to CWE-863: Incorrect Authorization. The application exposes invitation information based on identifiers that may be discoverable and treats an email address supplied during account creation or invitation acceptance as sufficient proof of recipient ownership. This insecure pattern allows identity and membership decisions to rely on attacker-controlled claims instead of verified authorization context.

The underlying bug is an authorization failure in invitation handling, mapping to CWE-863: Incorrect Authorization. The application exposes invitation information based on identifiers that may be discoverable and treats an email address supplied during account creation or invitation acceptance as sufficient proof of recipient ownership. This insecure pattern allows identity and membership decisions to rely on attacker-controlled claims instead of verified authorization context.

Potential impact

  • An attacker may gain unauthorized membership in a target workspace
  • An attacker may obtain access to the associated project and its permitted data
  • Project information or collaboration activity could be exposed
  • Unauthorized users may be able to perform project actions allowed by their assigned role
  • Workspace integrity could be affected through unauthorized participation
  • An attacker may gain unauthorized membership in a target workspace
  • An attacker may obtain access to the associated project and its permitted data
  • Project information or collaboration activity could be exposed
  • Unauthorized users may be able to perform project actions allowed by their assigned role
  • Workspace integrity could be affected through unauthorized participation

General mitigation guidance

Mitigation generally focuses on binding invitation acceptance to a verified recipient identity and enforcing authorization consistently across all invitation-related endpoints.

Common defensive patterns include:

  • Require mailbox or equivalent out-of-band verification before accepting invitations
  • Use single-use, high-entropy invitation tokens that are bound to the intended invitation
  • Enforce authorization checks for invitation enumeration using the caller's workspace and project permissions
  • Avoid treating a submitted email address alone as proof of invitation ownership
  • Revalidate invitation status, recipient identity, expiration, and target scope at acceptance time
  • Apply least privilege to newly added members and limit invitation data returned by APIs

Mitigation generally focuses on binding invitation acceptance to a verified recipient identity and enforcing authorization consistently across all invitation-related endpoints.

Common defensive patterns include:

  • Require mailbox or equivalent out-of-band verification before accepting invitations
  • Use single-use, high-entropy invitation tokens that are bound to the intended invitation
  • Enforce authorization checks for invitation enumeration using the caller's workspace and project permissions
  • Avoid treating a submitted email address alone as proof of invitation ownership
  • Revalidate invitation status, recipient identity, expiration, and target scope at acceptance time
  • Apply least privilege to newly added members and limit invitation data returned by APIs

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static and dynamic analysis of invitation endpoints for missing object-level authorization checks
  • Code review signals where email addresses or user-supplied identifiers determine membership without verification
  • Tests that attempt invitation enumeration across projects and acceptance with newly created accounts
  • Monitoring for unusual invitation lookups, repeated registration using invited addresses, and rapid joins after registration
  • Policy enforcement requiring verified identity binding and server-side authorization for membership changes

Automated security testing and code review tools may help identify authorization gaps, but business-logic testing remains important.

Organizations can look for this class of issue through:

  • Static and dynamic analysis of invitation endpoints for missing object-level authorization checks
  • Code review signals where email addresses or user-supplied identifiers determine membership without verification
  • Tests that attempt invitation enumeration across projects and acceptance with newly created accounts
  • Monitoring for unusual invitation lookups, repeated registration using invited addresses, and rapid joins after registration
  • Policy enforcement requiring verified identity binding and server-side authorization for membership changes

Automated security testing and code review tools may help identify authorization gaps, but business-logic testing remains important.

Sources

SourceLink
github.comgithub.com/makeplane/plane/commit/14a4c22f94eac1582439e41112213f976c6a6cf7
github.comgithub.com/makeplane/plane/pull/9308
github.comgithub.com/makeplane/plane/releases/tag/v1.4.0
github.comgithub.com/makeplane/plane/security/advisories/GHSA-g36h-p63v-g9c7

Frequently asked

questions

The invitation-list access path requires authentication, but the invitation-join path is publicly accessible. Exploitation depends on combining those behaviors with the ability to create an account using the invited address.

The attacker generally needs a Plane account, the relevant workspace slug and project ID, and a way to register an account for an email address associated with an unregistered pending invitation.

Bind invitations to verified recipient identity and single-use authorization tokens, while enforcing server-side permission checks for invitation discovery and acceptance.

Test every membership-changing endpoint for object-level authorization, require out-of-band identity verification, avoid trusting user-submitted email claims, and monitor anomalous invitation and registration activity.

The invitation-list access path requires authentication, but the invitation-join path is publicly accessible. Exploitation depends on combining those behaviors with the ability to create an account using the invited address.

The attacker generally needs a Plane account, the relevant workspace slug and project ID, and a way to register an account for an email address associated with an unregistered pending invitation.

Bind invitations to verified recipient identity and single-use authorization tokens, while enforcing server-side permission checks for invitation discovery and acceptance.

Test every membership-changing endpoint for object-level authorization, require out-of-band identity verification, avoid trusting user-submitted email claims, and monitor anomalous invitation and registration activity.

Find out what's already
exploitable in your codebase.