/

CVE-2026-105633

Severity:

HIGH RISK

(7.1)

Broken Object Level Authorization (CWE-639) in Plane

CVE-2026-105633

Deferred

Vulnerability type

Category:

Broken Object Level Authorization

CWE:

CWE-639

Impact:

Unauthorized attachment modification and ownership transfer

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 V2 issue-attachment PATCH endpoint may authorize an attachment using its UUID without verifying that the attachment belongs to the issue identified in the URL. A project member who can access the endpoint may modify another user's pending attachment and, in certain states, transfer its ownership to themselves.

Plane's V2 issue-attachment PATCH endpoint may authorize an attachment using its UUID without verifying that the attachment belongs to the issue identified in the URL. A project member who can access the endpoint may modify another user's pending attachment and, in certain states, transfer its ownership to themselves.

Affected context

The issue occurs in Plane deployments using the affected V2 issue-attachment PATCH handler. Risk is present when a project member can submit attachment updates, the request identifies an attachment by its primary-key UUID, and the server does not confirm that the attachment is associated with the issue_id supplied in the URL. Pending, unconfirmed attachments are particularly sensitive because the handler may replace their creator with the requesting user.

The issue occurs in Plane deployments using the affected V2 issue-attachment PATCH handler. Risk is present when a project member can submit attachment updates, the request identifies an attachment by its primary-key UUID, and the server does not confirm that the attachment is associated with the issue_id supplied in the URL. Pending, unconfirmed attachments are particularly sensitive because the handler may replace their creator with the requesting user.

Exploit preconditions

  • Attack surface: V2 issue-attachment PATCH API
  • Required access: Project-member access sufficient to submit attachment updates
  • Targeting requirement: Knowledge of, or access to, another attachment's primary-key UUID
  • Trigger point: An attachment update request containing a controlled issue_id and target attachment identifier
  • Why exploitation is possible: Authorization and database selection use the attachment UUID, workspace, and project identifiers without binding the record to the issue_id in the URL
  • Attack surface: V2 issue-attachment PATCH API
  • Required access: Project-member access sufficient to submit attachment updates
  • Targeting requirement: Knowledge of, or access to, another attachment's primary-key UUID
  • Trigger point: An attachment update request containing a controlled issue_id and target attachment identifier
  • Why exploitation is possible: Authorization and database selection use the attachment UUID, workspace, and project identifiers without binding the record to the issue_id in the URL

Why this happens

The underlying bug is an object-level authorization failure mapped to CWE-639. The endpoint accepts an issue identifier as part of the resource path but omits that identifier from the database lookup and ownership authorization relationship. As a result, a valid attachment UUID can select an object outside the requested issue context, and state-dependent update logic can apply changes using the attacker's identity.

The underlying bug is an object-level authorization failure mapped to CWE-639. The endpoint accepts an issue identifier as part of the resource path but omits that identifier from the database lookup and ownership authorization relationship. As a result, a valid attachment UUID can select an object outside the requested issue context, and state-dependent update logic can apply changes using the attacker's identity.

Potential impact

  • An attacker may modify another user's attachment metadata or state.
  • An attacker could transfer ownership of eligible pending attachments.
  • Users may lose control or attribution of uploaded project content.
  • Project records and collaboration workflows may be manipulated.
  • The flaw can contribute to unauthorized disclosure or destructive changes if attachment updates expose additional functionality.
  • An attacker may modify another user's attachment metadata or state.
  • An attacker could transfer ownership of eligible pending attachments.
  • Users may lose control or attribution of uploaded project content.
  • Project records and collaboration workflows may be manipulated.
  • The flaw can contribute to unauthorized disclosure or destructive changes if attachment updates expose additional functionality.

General mitigation guidance

Mitigation generally focuses on enforcing object-level authorization at every

lookup and update boundary.

Common defensive patterns include:

  • Bind all path and request identifiers, including issue_id, to the database query and authorization check.
  • Verify workspace, project, issue, attachment, and user relationships before applying changes.
  • Use centralized authorization policies that evaluate the target object rather than relying on client-supplied context.
  • Restrict ownership changes to explicit, authorized workflows and preserve server-side attribution.
  • Apply least-privilege permissions and minimize which project members can update attachment state.
  • Return consistent not-found or authorization responses without revealing whether unrelated object identifiers exist.

Mitigation generally focuses on enforcing object-level authorization at every

lookup and update boundary.

Common defensive patterns include:

  • Bind all path and request identifiers, including issue_id, to the database query and authorization check.
  • Verify workspace, project, issue, attachment, and user relationships before applying changes.
  • Use centralized authorization policies that evaluate the target object rather than relying on client-supplied context.
  • Restrict ownership changes to explicit, authorized workflows and preserve server-side attribution.
  • Apply least-privilege permissions and minimize which project members can update attachment state.
  • Return consistent not-found or authorization responses without revealing whether unrelated object identifiers exist.

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis and review rules that flag resource lookups using only a UUID while ignoring parent-resource identifiers.
  • Code review checks for authorization performed after object selection or only against workspace and project scope.
  • API tests that pair valid child-object identifiers with mismatched parent identifiers.
  • Regression tests covering ownership, pending-state transitions, and cross-user attachment updates.
  • Policy enforcement requiring every object mutation endpoint to validate the complete resource hierarchy.
  • Audit-log monitoring for attachment changes where the actor, issue, and recorded owner do not align.

Organizations can look for this class of issue through:

  • Static analysis and review rules that flag resource lookups using only a UUID while ignoring parent-resource identifiers.
  • Code review checks for authorization performed after object selection or only against workspace and project scope.
  • API tests that pair valid child-object identifiers with mismatched parent identifiers.
  • Regression tests covering ownership, pending-state transitions, and cross-user attachment updates.
  • Policy enforcement requiring every object mutation endpoint to validate the complete resource hierarchy.
  • Audit-log monitoring for attachment changes where the actor, issue, and recorded owner do not align.

Sources

SourceLink
github.comgithub.com/makeplane/plane/commit/5829f0febf0739494d576b60d4943d10d236bc96
github.comgithub.com/makeplane/plane/pull/9315
github.comgithub.com/makeplane/plane/releases/tag/v1.4.0
github.comgithub.com/makeplane/plane/security/advisories/GHSA-5mxw-g5mw-3v3w

Frequently asked

questions

A project member with sufficient access to submit attachment update requests may be

able to exploit it, subject to the deployment's authorization rules and knowledge

of a target attachment identifier.

No. The described condition involves project-member access rather than administrator

privileges, although the exact scope depends on endpoint permissions and object

visibility.

Enforce authorization using the complete object hierarchy. The attachment lookup and

update should require the supplied issue, project, workspace, and attachment

identifiers to refer to the same authorized resource.

Use centralized object-level authorization, add cross-tenant and cross-parent API

tests, validate ownership before state transitions, and audit mutations for

inconsistencies between requested and stored relationships.

A project member with sufficient access to submit attachment update requests may be

able to exploit it, subject to the deployment's authorization rules and knowledge

of a target attachment identifier.

No. The described condition involves project-member access rather than administrator

privileges, although the exact scope depends on endpoint permissions and object

visibility.

Enforce authorization using the complete object hierarchy. The attachment lookup and

update should require the supplied issue, project, workspace, and attachment

identifiers to refer to the same authorized resource.

Use centralized object-level authorization, add cross-tenant and cross-parent API

tests, validate ownership before state transitions, and audit mutations for

inconsistencies between requested and stored relationships.

Find out what's already
exploitable in your codebase.