/

CVE-2026-102986

Severity:

HIGH RISK

(8.1)

Broken Access Control (CWE-639) in Plane Public Assets

CVE-2026-102986

Deferred

Vulnerability type

Category:

Broken Access Control

CWE:

CWE-639

Impact:

Unauthorized asset modification, storage abuse, and data loss

Severity:

HIGH RISK

(8.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 project asset endpoint checks whether a requester is authenticated but does not verify membership in the target workspace or project. An authenticated user who knows a published project's public identifier may therefore inject files or soft-delete existing assets, causing cross-workspace storage abuse and data loss.

Plane's public project asset endpoint checks whether a requester is authenticated but does not verify membership in the target workspace or project. An authenticated user who knows a published project's public identifier may therefore inject files or soft-delete existing assets, causing cross-workspace storage abuse and data loss.

Affected context

The issue occurs in Plane deployments using the public project asset endpoint for published projects. Write operations require authentication, but authorization may not confirm that the requester belongs to the workspace or project associated with the supplied public DeployBoard anchor. As a result, the endpoint can expose asset-management actions across workspace boundaries.

The issue occurs in Plane deployments using the public project asset endpoint for published projects. Write operations require authentication, but authorization may not confirm that the requester belongs to the workspace or project associated with the supplied public DeployBoard anchor. As a result, the endpoint can expose asset-management actions across workspace boundaries.

Exploit preconditions

  • Attack surface: The public project asset API endpoint used for asset creation and deletion
  • Required access: An authenticated Plane account
  • Target knowledge: A valid public DeployBoard anchor for a published project
  • Trigger point: A write request that creates an asset or soft-deletes an existing asset by identifier
  • Why exploitation is possible: Authentication is enforced without a corresponding workspace or project membership check
  • Attack surface: The public project asset API endpoint used for asset creation and deletion
  • Required access: An authenticated Plane account
  • Target knowledge: A valid public DeployBoard anchor for a published project
  • Trigger point: A write request that creates an asset or soft-deletes an existing asset by identifier
  • Why exploitation is possible: Authentication is enforced without a corresponding workspace or project membership check

Why this happens

The underlying bug is an authorization-scoping failure. The endpoint establishes that the requester is authenticated, but it does not bind the requested asset operation to the requester's workspace or project membership. This maps to CWE-639: Authorization Bypass Through User-Controlled Key, because a user-controlled project or asset identifier can be used to access records outside the user's authorized scope.

The underlying bug is an authorization-scoping failure. The endpoint establishes that the requester is authenticated, but it does not bind the requested asset operation to the requester's workspace or project membership. This maps to CWE-639: Authorization Bypass Through User-Controlled Key, because a user-controlled project or asset identifier can be used to access records outside the user's authorized scope.

Potential impact

  • An attacker may create unauthorized file records in another workspace's project.
  • An attacker could consume storage through cross-workspace file injection.
  • Existing project assets may be soft-deleted without the owner's authorization.
  • Project data could become unavailable or inconsistent.
  • Organizations may face data loss, operational disruption, and cleanup costs.
  • An attacker may create unauthorized file records in another workspace's project.
  • An attacker could consume storage through cross-workspace file injection.
  • Existing project assets may be soft-deleted without the owner's authorization.
  • Project data could become unavailable or inconsistent.
  • Organizations may face data loss, operational disruption, and cleanup costs.

General mitigation guidance

Mitigation generally focuses on enforcing object-level authorization for every asset operation rather than relying on authentication or public identifiers alone.

Common defensive patterns include:

  • Verify workspace and project membership before creating, modifying, or deleting an asset.
  • Resolve public identifiers to authorized server-side objects and apply deny-by-default access checks.
  • Enforce ownership and tenant boundaries consistently across all API methods.
  • Use separate authorization policies for published-project access and asset-management operations.
  • Apply storage quotas, rate limits, and file validation to reduce abuse impact.
  • Run destructive operations through auditable, explicitly authorized service paths.

Mitigation generally focuses on enforcing object-level authorization for every asset operation rather than relying on authentication or public identifiers alone.

Common defensive patterns include:

  • Verify workspace and project membership before creating, modifying, or deleting an asset.
  • Resolve public identifiers to authorized server-side objects and apply deny-by-default access checks.
  • Enforce ownership and tenant boundaries consistently across all API methods.
  • Use separate authorization policies for published-project access and asset-management operations.
  • Apply storage quotas, rate limits, and file validation to reduce abuse impact.
  • Run destructive operations through auditable, explicitly authorized service paths.

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis and code review checks for authorization decisions based only on authentication state.
  • Review signals where user-supplied workspace, project, asset, or public identifiers are used directly in database operations.
  • Tests that exercise cross-tenant and cross-project create, update, and delete attempts.
  • API policy checks requiring object-level authorization before every state-changing operation.
  • Audit-log monitoring for asset changes made by users outside the owning workspace or project.
  • Automated security testing that validates tenant isolation and access-control invariants.

Organizations can look for this class of issue through:

  • Static analysis and code review checks for authorization decisions based only on authentication state.
  • Review signals where user-supplied workspace, project, asset, or public identifiers are used directly in database operations.
  • Tests that exercise cross-tenant and cross-project create, update, and delete attempts.
  • API policy checks requiring object-level authorization before every state-changing operation.
  • Audit-log monitoring for asset changes made by users outside the owning workspace or project.
  • Automated security testing that validates tenant isolation and access-control invariants.

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-8688-h9x2-v83m

Frequently asked

questions

It may be exploitable through the network-facing API when an attacker has an authenticated account and can identify a published project's public anchor.

No. The issue is that authentication may be sufficient even when the requester lacks membership in the workspace or project containing the targeted assets.

Enforce object-level authorization on every asset operation, verifying workspace and project membership before processing the requested object identifier.

Use deny-by-default authorization policies, test cross-tenant access paths, review all state-changing endpoints, and monitor audit logs for activity outside a user's authorized scope.

It may be exploitable through the network-facing API when an attacker has an authenticated account and can identify a published project's public anchor.

No. The issue is that authentication may be sufficient even when the requester lacks membership in the workspace or project containing the targeted assets.

Enforce object-level authorization on every asset operation, verifying workspace and project membership before processing the requested object identifier.

Use deny-by-default authorization policies, test cross-tenant access paths, review all state-changing endpoints, and monitor audit logs for activity outside a user's authorized scope.

Find out what's already
exploitable in your codebase.