Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as project guest or member
-
ExploitSend PATCH with is_active:false, omit role
-
ExecutionBypass misplaced object-level authz check
-
ImpactDeactivate project admin and take over project
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account with at least guest or member role in the target Plane project (PR:L); it is not remote-unauthenticated. Concretely, the attacker PATCHes ProjectMemberViewSet.partial_update at the project members endpoint with a body containing is_active (e.g. {"is_active": false}) while deliberately omitting the 'role' field, because all authorization guards lived inside the 'if "role" in request.data' branch and is_active was writable via ProjectMemberSerializer(fields='__all__'); this deactivates any member including admins. Separately, ProjectMemberPreferenceEndpoint.patch trusts the member_id path value, so any project member can overwrite another member's preferences. No non-default configuration or feature flag is needed - this affects default deployments of Plane 1.3.1 and earlier. Limiting factors: the attacker must already possess valid project membership, and the flaw is fixed in 1.4.0. |
| Impact | This is a genuine but moderate-priority issue, best characterized as a broken object-level authorization (BOLA/IDOR) flaw rather than the 'Authentication Bypass' the input tag suggests - the attacker must already be an authenticated low-privilege project member. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N = 6.5) is internally consistent with the description: network-reachable, low-complexity, requires low privileges (an existing guest/member account), no user interaction, and high integrity impact (deactivating a project administrator enables effective project takeover; cross-member preference tampering). No EPSS score, KEV listing, or public POC is present in the supplied data, so there is no evidence of active or widespread exploitation - the realistic signal is a low-privilege insider or a compromised member account. The one notable tension is that the vendor's GHSA regression tests describe guest-driven admin deactivation and 'take over the project,' which is an integrity/availability-of-access consequence, yet the base vector sets A:N; the admin-takeover framing could arguably justify some availability impact, but NVD's I:H-only scoring is defensible since the primary effect is unauthorized state mutation. Treat as an authenticated privilege-escalation/tampering bug: prioritize for any Plane deployment with untrusted or numerous project members, lower priority for small trusted single-tenant installs. |
| Exploit ScenarioDerived | A user holding only a guest or member role in a Plane project sends a crafted PATCH to the project member endpoint containing {"is_active": false} while omitting the 'role' field, which skips the authorization guard and deactivates a project administrator, letting the attacker seize control of the project. The same account can also PATCH the preferences endpoint with another member's member_id to overwrite that member's preferences. No public exploit is identified, but the vendor's fix commit and its regression tests (GHSA-25gg-cxm8-g7h9) fully disclose the request shape, making reproduction straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Missing object-level authorization in Plane 1.3.1 and earlier lets any authenticated project guest or member deactivate other project members - including administrators - by sending a PATCH that includes is_active while omitting the role field, and separately allows cross-member tampering with ProjectMemberPreference records via a trusted member_id path parameter. Exploitation requires a valid low-privilege account already enrolled in the target project (CVSS PR:L, network reachable, no user interaction), and results in high integrity impact with no confidentiality or availability loss scored; no public exploit code has been identified at time of analysis and the issue is not in CISA KEV. The flaw is fixed in Plane 1.4.0.
RemediationAI
Vendor-released patch: upgrade Plane to 1.4.0, which is the version named in the release notes and in the vendor advisory for this issue. The fix is captured in commit dc9d80b2d2a499b967f0b541e083b283f463719f and pull request makeplane/plane#9367, and the patched build is published at https://github.com/makeplane/plane/releases/tag/v1.4.0; the authoritative advisory is https://github.com/makeplane/plane/security/advisories/GHSA-25gg-cxm8-g7h9. If immediate upgrade is not feasible, compensating controls should target the two vulnerable paths: because exploitation requires an existing project membership, immediately audit and prune low-trust guest/member accounts from sensitive projects and restrict who can be added as a member (this reduces the attacker pool but does not eliminate the risk from legitimate members). Additionally, block or alert on PATCH requests to /api/workspaces/{slug}/projects/{project_id}/members/{pk}/ whose JSON body contains is_active but not role, and monitor ProjectMemberPreference update requests for member_id values that do not match the authenticated user - both can be enforced at a reverse proxy or WAF, with the trade-off that legitimate admin-driven member deactivation requests may also be filtered, so the rule should be scoped to non-admin roles or run in log-only mode first. Since no patched-version downgrade path exists, backporting the guard from the referenced commit into the deployed 1.3.x branch is the most reliable stopgap; note that no vendor-published workaround is documented, so these controls are operator-side mitigations rather than supported fixes.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Plane is an open-source Django REST Framework project management application. The root cause is CWE-862 (Missing Authorization): in ProjectMemberViewSet.partial_update, every permission guard lived inside the if "role" in request.data: branch, while is_active remained writable through the ProjectMemberSerializer(fields="__all__"). A request body that omits role therefore skips all role-escalation checks and still flips is_active, enabling a guest (project role 5) or member (role 15) to deactivate a peer or even a project admin. The companion endpoint ProjectMemberPreferenceEndpoint.patch likewise trusted the member_id path value without verifying that the caller owns that membership, permitting preference overwrite across members. The upstream fix mirrors the existing role block and destroy() logic: is_active changes now require project-admin or workspace-admin privileges and cannot be applied to a member whose role is equal to or higher than the requester's. Note that while the input tag reads 'Authentication Bypass,' the vulnerability is more accurately a broken object-level authorization (BOLA/IDOR) flaw - the attacker must already be authenticated and hold project membership; no authentication control is actually bypassed. The patch adds regression tests under apps/api/plane/tests/contract/app/test_project_member_is_active_authz.py covering guest-deactivates-admin, member-deactivates-admin, and guest-deactivates-peer scenarios.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
Authenticated low-privilege member (PR:L) sends a simple network API request (AV:N/AC:L) to mutate another member's state; high integrity impact, no confidentiality or availability loss by base scoring.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
Plane is an open-source project management tool. In 1.3.1 and earlier, ProjectMemberViewSet.partial_update places its authorization checks inside the role update branch, so a guest or member can omit role and change another ProjectMember record's is_active field, including deactivating a project administrator. ProjectMemberPreferenceEndpoint.patch separately trusts the member_id path value and lets a project member overwrite another member's preferences. These missing object-level authorization checks permit membership disruption and cross-member preference tampering. The vulnerability is fixed in 1.4.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-101616
NVD
CVE.org
EPSS
GitHub
Exploit-DB