/

CVE-2026-104975

Severity:

HIGH RISK

(7.1)

Cross-Tenant IDOR (CWE-639) in Plane Asset Endpoints

CVE-2026-104975

Deferred

Vulnerability type

Category:

Insecure Direct Object Reference

CWE:

CWE-639

Impact:

Cross-Tenant Unauthorized Asset Access and Modification

Severity:

HIGH RISK

(7.1)

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

Plane's public-board asset endpoints can access file assets without fully scoping requests to the authorized project, workspace, or user membership. An attacker who can reach a suitable public-board operation may read, overwrite, or restore assets belonging to other projects or workspaces.

Plane's public-board asset endpoints can access file assets without fully scoping requests to the authorized project, workspace, or user membership. An attacker who can reach a suitable public-board operation may read, overwrite, or restore assets belonging to other projects or workspaces.

Affected context

The vulnerability occurs in Plane's Spaces public-board asset operations, where an entity asset endpoint and an asset restore endpoint resolve a deployment board from a public anchor and then access file assets using workspace-level scoping alone. Risk is present when public-board routes are enabled and asset identifiers or related operation parameters can be supplied without enforcing project boundaries and workspace membership.

The vulnerability occurs in Plane's Spaces public-board asset operations, where an entity asset endpoint and an asset restore endpoint resolve a deployment board from a public anchor and then access file assets using workspace-level scoping alone. Risk is present when public-board routes are enabled and asset identifiers or related operation parameters can be supplied without enforcing project boundaries and workspace membership.

Exploit preconditions

  • Attack surface: Public-board asset endpoints under the /api/public/ route space
  • Required access: Ability to reach a relevant public-board operation; authenticated membership is not necessarily enforced by the affected handlers
  • Trigger point: Asset retrieval, overwrite, or restoration through the entity asset or asset restore endpoint
  • Why exploitation is possible: Asset lookups rely on board workspace scope without consistently constraining the project or verifying membership, allowing identifiers associated with other tenants to be resolved
  • Attack surface: Public-board asset endpoints under the /api/public/ route space
  • Required access: Ability to reach a relevant public-board operation; authenticated membership is not necessarily enforced by the affected handlers
  • Trigger point: Asset retrieval, overwrite, or restoration through the entity asset or asset restore endpoint
  • Why exploitation is possible: Asset lookups rely on board workspace scope without consistently constraining the project or verifying membership, allowing identifiers associated with other tenants to be resolved

Why this happens

The underlying flaw is an incomplete authorization check in object-level asset access. The endpoints establish a workspace relationship through a public board but do not consistently apply project-level constraints or membership validation before reading or modifying a FileAsset record. This maps to CWE-639: Authorization Bypass Through User-Controlled Key, commonly known as insecure direct object reference, because a supplied or indirectly selected object identifier can access a resource outside the requester's authorized tenant or project.

The underlying flaw is an incomplete authorization check in object-level asset access. The endpoints establish a workspace relationship through a public board but do not consistently apply project-level constraints or membership validation before reading or modifying a FileAsset record. This maps to CWE-639: Authorization Bypass Through User-Controlled Key, commonly known as insecure direct object reference, because a supplied or indirectly selected object identifier can access a resource outside the requester's authorized tenant or project.

Potential impact

  • Unauthorized users may read assets from other projects or workspaces
  • Attackers could overwrite assets belonging to unrelated projects
  • Attackers may restore assets that administrators intended to remain deleted
  • Project content integrity and confidentiality could be reduced
  • Cross-tenant attacks could support phishing, content tampering, or broader operational disruption
  • Unauthorized users may read assets from other projects or workspaces
  • Attackers could overwrite assets belonging to unrelated projects
  • Attackers may restore assets that administrators intended to remain deleted
  • Project content integrity and confidentiality could be reduced
  • Cross-tenant attacks could support phishing, content tampering, or broader operational disruption

General mitigation guidance

Mitigation generally centers on enforcing authorization at every asset access boundary rather than relying on a related public board's workspace association.

Common defensive patterns include:

  • Require explicit membership or equivalent authorization before asset access
  • Apply both workspace and project scoping to every asset query and mutation
  • Derive authorization context from trusted server-side relationships instead of client-supplied identifiers
  • Use centralized object-level authorization checks for read, update, and restore operations
  • Deny access by default when project, workspace, or membership relationships are ambiguous
  • Limit public-board capabilities to the minimum asset operations required
  • Log and monitor cross-project asset access attempts

Mitigation generally centers on enforcing authorization at every asset access boundary rather than relying on a related public board's workspace association.

Common defensive patterns include:

  • Require explicit membership or equivalent authorization before asset access
  • Apply both workspace and project scoping to every asset query and mutation
  • Derive authorization context from trusted server-side relationships instead of client-supplied identifiers
  • Use centralized object-level authorization checks for read, update, and restore operations
  • Deny access by default when project, workspace, or membership relationships are ambiguous
  • Limit public-board capabilities to the minimum asset operations required
  • Log and monitor cross-project asset access attempts

How teams detect issues like this

Organizations can identify similar issues through:

  • Static analysis and code review rules that flag object lookups lacking tenant, project, or ownership predicates
  • Review of public and unauthenticated routes that read or mutate database-backed resources
  • Tests that attempt to access assets across workspace and project boundaries
  • Authorization policy checks covering read, overwrite, delete, and restore actions
  • Runtime monitoring for unusual cross-tenant asset access or repeated identifier enumeration
  • Automated security review tools that trace user-controlled identifiers into database queries and mutation paths

Organizations can identify similar issues through:

  • Static analysis and code review rules that flag object lookups lacking tenant, project, or ownership predicates
  • Review of public and unauthenticated routes that read or mutate database-backed resources
  • Tests that attempt to access assets across workspace and project boundaries
  • Authorization policy checks covering read, overwrite, delete, and restore actions
  • Runtime monitoring for unusual cross-tenant asset access or repeated identifier enumeration
  • Automated security review tools that trace user-controlled identifiers into database queries and mutation paths

Sources

SourceLink
github.comgithub.com/makeplane/plane/commit/4577dc3f7a6b5a198602b602a45c6b0abdc7204b
github.comgithub.com/makeplane/plane/pull/9288
github.comgithub.com/makeplane/plane/releases/tag/v1.4.0
github.comgithub.com/makeplane/plane/security/advisories/GHSA-jh4v-88j2-g65v

Frequently asked

questions

Yes, it may be remotely exploitable through the affected public-board asset endpoints when those routes are reachable and the attacker can supply or influence the relevant asset selection data.

Not necessarily. The affected operations are served under public-board routes, so the decisive factors are route exposure, available public-board context, and whether the deployment adds independent access controls.

Enforce centralized object-level authorization before every asset read or mutation, including explicit workspace and project scoping together with membership or equivalent permission checks.

Use deny-by-default tenant authorization, test every public endpoint against cross-project and cross-workspace access, and require consistent authorization policies for asset retrieval, modification, and restoration.

Yes, it may be remotely exploitable through the affected public-board asset endpoints when those routes are reachable and the attacker can supply or influence the relevant asset selection data.

Not necessarily. The affected operations are served under public-board routes, so the decisive factors are route exposure, available public-board context, and whether the deployment adds independent access controls.

Enforce centralized object-level authorization before every asset read or mutation, including explicit workspace and project scoping together with membership or equivalent permission checks.

Use deny-by-default tenant authorization, test every public endpoint against cross-project and cross-workspace access, and require consistent authorization policies for asset retrieval, modification, and restoration.

Find out what's already
exploitable in your codebase.