/

CVE-2026-105637

Severity:

CRITICAL RISK

(9.6)

Broken Object Authorization (CWE-639) in Plane Assets

CVE-2026-105637

Deferred

Vulnerability type

Category:

Broken Object-Level Authorization

CWE:

CWE-639

Impact:

Cross-project asset takeover and unauthorized file disclosure

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

A broken object-level authorization flaw in Plane's bulk asset endpoint allows a workspace Guest to reference assets belonging to another project in the same workspace. If the attacker knows valid asset identifiers and can control a destination entity, they may reassign the assets and obtain presigned download URLs for files they should not access.

A broken object-level authorization flaw in Plane's bulk asset endpoint allows a workspace Guest to reference assets belonging to another project in the same workspace. If the attacker knows valid asset identifiers and can control a destination entity, they may reassign the assets and obtain presigned download URLs for files they should not access.

Affected context

The issue occurs in Plane deployments where the bulk asset endpoint processes asset identifiers together with a workspace slug and project identifier from the request path. The asset lookup verifies workspace membership but does not sufficiently bind each asset to the project identified by the URL, allowing cross-project references within the same workspace under conditions where a Guest can submit the request.

The issue occurs in Plane deployments where the bulk asset endpoint processes asset identifiers together with a workspace slug and project identifier from the request path. The asset lookup verifies workspace membership but does not sufficiently bind each asset to the project identified by the URL, allowing cross-project references within the same workspace under conditions where a Guest can submit the request.

Exploit preconditions

  • Attack surface: Plane's bulk asset management API
  • Required access: Workspace Guest access and the ability to submit requests
  • Required knowledge: Valid asset UUIDs belonging to another project in the same workspace
  • Trigger point: Bulk asset processing when asset ownership or related entity identifiers are updated
  • Why exploitation is possible: The asset query filters by workspace and supplied asset IDs but does not enforce the project boundary from the request URL
  • Attack surface: Plane's bulk asset management API
  • Required access: Workspace Guest access and the ability to submit requests
  • Required knowledge: Valid asset UUIDs belonging to another project in the same workspace
  • Trigger point: Bulk asset processing when asset ownership or related entity identifiers are updated
  • Why exploitation is possible: The asset query filters by workspace and supplied asset IDs but does not enforce the project boundary from the request URL

Why this happens

The endpoint performs an object lookup using identifiers and workspace scope without consistently applying the project-level authorization context. This creates an authorization gap in which possession of a valid object identifier can substitute for permission to access or modify that object. The behavior maps to CWE-639, Authorization Bypass Through User-Controlled Key, because user-controlled identifiers influence object selection without an adequate ownership or relationship check.

The endpoint performs an object lookup using identifiers and workspace scope without consistently applying the project-level authorization context. This creates an authorization gap in which possession of a valid object identifier can substitute for permission to access or modify that object. The behavior maps to CWE-639, Authorization Bypass Through User-Controlled Key, because user-controlled identifiers influence object selection without an adequate ownership or relationship check.

Potential impact

  • An attacker may reassign assets owned by another project within the same workspace.
  • An attacker could associate hijacked files with issues, comments, pages, drafts, or projects they control.
  • Plane may generate presigned download URLs for files outside the attacker's authorized project.
  • Confidential project attachments could be disclosed.
  • Asset relationships and project data could be altered or disrupted.
  • An attacker may reassign assets owned by another project within the same workspace.
  • An attacker could associate hijacked files with issues, comments, pages, drafts, or projects they control.
  • Plane may generate presigned download URLs for files outside the attacker's authorized project.
  • Confidential project attachments could be disclosed.
  • Asset relationships and project data could be altered or disrupted.

General mitigation guidance

Mitigation generally centers on enforcing authorization at the object and

relationship level rather than relying only on workspace membership or

user-supplied identifiers.

Common defensive patterns include:

  • Scope asset queries by the authenticated user's permitted project relationships.
  • Enforce that every asset belongs to the project represented by the request context before allowing updates.
  • Recheck authorization immediately before generating presigned download URLs.
  • Avoid treating client-supplied project or entity identifiers as proof of ownership.
  • Apply least-privilege permissions to Guest roles and separate read, update, and reassignment capabilities.
  • Use centralized, deny-by-default authorization policies consistently across asset endpoints.

Mitigation generally centers on enforcing authorization at the object and

relationship level rather than relying only on workspace membership or

user-supplied identifiers.

Common defensive patterns include:

  • Scope asset queries by the authenticated user's permitted project relationships.
  • Enforce that every asset belongs to the project represented by the request context before allowing updates.
  • Recheck authorization immediately before generating presigned download URLs.
  • Avoid treating client-supplied project or entity identifiers as proof of ownership.
  • Apply least-privilege permissions to Guest roles and separate read, update, and reassignment capabilities.
  • Use centralized, deny-by-default authorization policies consistently across asset endpoints.

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static and semantic analysis that identifies database queries using user-controlled IDs without tenant or project scoping.
  • Code review checks for authorization decisions performed only at workspace level.
  • Tests that attempt cross-project object access using identifiers from sibling projects.
  • API monitoring for Guests submitting asset IDs that do not belong to the project in the request context.
  • Policy enforcement requiring object-level authorization checks before mutations and signed URL generation.

Automated security review tools may help flag identifier-based lookups that lack corresponding ownership checks.

Organizations can look for this class of issue through:

  • Static and semantic analysis that identifies database queries using user-controlled IDs without tenant or project scoping.
  • Code review checks for authorization decisions performed only at workspace level.
  • Tests that attempt cross-project object access using identifiers from sibling projects.
  • API monitoring for Guests submitting asset IDs that do not belong to the project in the request context.
  • Policy enforcement requiring object-level authorization checks before mutations and signed URL generation.

Automated security review tools may help flag identifier-based lookups that lack corresponding ownership checks.

Sources

SourceLink
github.comgithub.com/makeplane/plane/commit/15e835710c7f938e0fae9c0ee77bb8162ff436a0
github.comgithub.com/makeplane/plane/pull/9495
github.comgithub.com/makeplane/plane/releases/tag/v1.4.0
github.comgithub.com/makeplane/plane/security/advisories/GHSA-r2hw-fff3-pjwp

Frequently asked

questions

A workspace Guest may be able to exploit it when they can submit asset identifiers from another project in the same workspace and control a destination entity.

No direct membership in the target project is the relevant missing control. The vulnerable lookup may accept an asset identifier from another project because project-level ownership is not adequately enforced.

Bind every asset lookup and mutation to the authenticated user's authorized project scope, and repeat that authorization check before issuing any download URL.

Use centralized object-level authorization, deny-by-default role policies, tenant and project boundary tests, and monitoring for cross-scope identifier use.

A workspace Guest may be able to exploit it when they can submit asset identifiers from another project in the same workspace and control a destination entity.

No direct membership in the target project is the relevant missing control. The vulnerable lookup may accept an asset identifier from another project because project-level ownership is not adequately enforced.

Bind every asset lookup and mutation to the authenticated user's authorized project scope, and repeat that authorization check before issuing any download URL.

Use centralized object-level authorization, deny-by-default role policies, tenant and project boundary tests, and monitoring for cross-scope identifier use.

Find out what's already
exploitable in your codebase.