Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain pending invitation UUID
-
DeliveryQuery public join GET endpoint unauthenticated
-
ExploitHarvest invitee email, role, and token
-
ExecutionRegister account using invited email
-
ImpactPOST accept invite, gain project membership
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attacker must know (or obtain) the UUID 'pk' of a pending ProjectMemberInvite record for a target project in Plane < 1.4.0 - this is the primary prerequisite and the reason complexity is High rather than Low, since UUIDs are not enumerable by default. Given a valid invite UUID, no authentication is required (the GET endpoint uses permission_classes=[AllowAny]) and it works against default configurations: the GET leaks the invitee email, role, and acceptance token, and the POST accept path validates only that the submitted email matches project_invite.email while failing to validate the invitation token. Limiting factors: exploitation is bounded to projects that currently have outstanding (unaccepted) invitations whose UUIDs the attacker can reference, and the attacker must be able to register an account with the disclosed email address. |
| Impact | Signals are moderately consistent and point to a genuine but condition-gated risk. The provided CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N, base 7.4 High) correctly captures that the GET endpoint is unauthenticated (PR:N via AllowAny) and network-reachable, but rates complexity High (AC:H) - which is appropriate because exploitation hinges on the attacker first knowing the invitation's UUID (the pk), a value that is not enumerable by default. No EPSS score, SSVC decision, or KEV entry was supplied in the input, and there is no POC flag, so exploitation status is: no public exploit identified at time of analysis. The only exploitation evidence is the vendor fix (PR #9305, commit 4b52dce, release v1.4.0) confirming the flaw and its mechanics. This is a real, authentic priority for anyone running self-hosted Plane < 1.4.0 - the vulnerability is confirmed by the vendor's own security advisory (GHSA-2r58-hgv7-635q) and the leaked email+token enables invitation hijacking - but it is not a mass-exploitable internet-worm scenario because the attacker must already possess a valid invite UUID. Missing data to note explicitly: no EPSS/KEV/SSVC were provided, so widespread-exploitation likelihood cannot be quantified from the input; absence of these is not evidence of low risk, only of unmeasured risk. |
| Exploit ScenarioDerived | An attacker who has learned or guessed a pending project-invite UUID (e.g., from a leaked/forwarded invite link, logs, or referrer) calls the unauthenticated GET /api/workspaces/{slug}/projects/{project_id}/join/{pk}/ endpoint and reads back the invitee's email, role, and acceptance token. They then register a new account using that disclosed email and POST to the join endpoint, which validates only the email match and not the token, letting them accept the invitation and join the target project with the intended role. No public exploit code was identified, but the vendor's patch diff fully documents the flaw mechanics. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Unauthenticated information disclosure and invitation bypass in Plane (makeplane) before 1.4.0: the GET join endpoint returns the complete ProjectMemberInvite object - invitee email, role, and acceptance token - to anonymous callers, and the companion POST accept endpoint validates only that the submitted email matches the stored invite, never the token. An attacker who knows a pending invitation's UUID can therefore learn the invited email address, register an account with it, and join the target project as the intended invitee. The primary prerequisite is possession of a non-enumerable invitation UUID, which is why complexity is rated High; no public exploit identified at time of analysis, and the issue is fixed in 1.4.0.
RemediationAI
Upgrade Plane to 1.4.0 or later (https://github.com/makeplane/plane/releases/tag/v1.4.0), which shipped the fix from PR 9305 / commit 4b52dce76e8aa97a8d87166fa8f4441c1cf646b1 that replaces the full invite serializer with ProjectMemberInvitePublicSerializer on the public GET join endpoint; vendor-released patch: 1.4.0. If immediate upgrade is not possible, apply compensating controls with awareness of their trade-offs: block or gate anonymous access to the /api/workspaces/*/projects/*/join/* paths at the reverse proxy or WAF so only authenticated sessions reach them - this stops the disclosure but also breaks the normal emailed-invite acceptance flow for unauthenticated users, so invites must then be accepted from within an already-authenticated session; audit and revoke outstanding pending ProjectMemberInvite rows (deleting or expiring unaccepted invitations) so no discoverable UUIDs remain, at the cost of requiring legitimately invited users to be re-invited; and restrict visibility of invitation UUIDs and project invite listings to project admins only. Monitor project membership changes and unexpected account registrations matching disclosed invite emails, since the POST path cannot be patched at the data layer. See the vendor advisory at https://github.com/makeplane/plane/security/advisories/GHSA-2r58-hgv7-635q for the authoritative fix details.
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 project management platform whose backend is a Django REST Framework API (apps/api/plane/app). The vulnerability class is CWE-200, exposure of sensitive information to an unauthorized actor, and it arises from an over-permissive serializer combined with a missing authorization check on a state-changing request. The GET handler for /api/workspaces/{slug}/projects/{project_id}/join/{pk}/ was declared with permission_classes = [AllowAny] and serialized the ProjectMemberInvite model using the same full ProjectMemberInviteSerializer used internally, so fields such as email, token, and role were emitted to any unauthenticated caller. The POST accept path had a separate logic flaw: it confirmed only that the submitted email equaled project_invite.email and never compared the submitted or stored invitation token, effectively making the leaked email sufficient to complete the join. The upstream fix (PR 9305, commit 4b52dce76e8aa97a8d87166fa8f4441c1cf646b1) introduces ProjectMemberInvitePublicSerializer, a read-only serializer that intentionally omits the email and token fields and exposes only id, project, workspace, role, message, accepted, and responded_at, and rebinds the GET view to that serializer.
Know when Plane gets its next vulnerability
- 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:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Unauthenticated network endpoint (PR:N/AV:N) but requires knowing a non-enumerable invite UUID (AC:H); leaked email/token gives C:H and invite hijack yields unauthorized project membership (I:H), no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Plane is an open-source project management tool. Prior to 1.4.0, ProjectJoinEndpoint at GET /api/workspaces/{slug}/projects/{project_id}/join/{pk}/ uses permission_classes = [AllowAny] and returns the full ProjectMemberInvite record, including its email, token, and role, to unauthenticated callers. The corresponding POST endpoint checks only whether the submitted email matches project_invite.email and does not validate the invitation token. An attacker who knows the invitation UUID can discover the invited email, register an account with that email, and accept the invitation without receiving the original invite. This issue is fixed in 1.4.0.
Technical POC Analysis
Evidence basis: GHSA-2r58-hgv7-635q (advisory, includes vulnerable code and curl PoC).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Plane (makeplane) instances running versions earlier than 1.4.0 expose pending project invitations to anonymous callers and allow anyone who knows an invitation's UUID to join the target project as the intended invitee, producing unauthorized membership and access to project content. Organizations that use Plane for internal project and issue tracking therefore face a direct access-control gap that can quietly place an attacker-controlled account inside sensitive workspaces. Leadership should care because the consequence is unauthorized project membership, not merely a data leak.
Apply vendor patch: 1.4.0. Where immediate upgrade is not possible, block or restrict external access to the invitation join endpoints at the reverse proxy/WAF, expire or cancel outstanding pending invitations to invalidate known UUIDs, require SSO and restrict invitations to approved email domains, and monitor for anonymous join-endpoint requests and new accounts registering with invited addresses.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Cross-workspace authorization bypass in Plane (makeplane) prior to version 1.3.1 allows any authenticated user of one wo
Plane version 0.7.1 allows an unauthenticated attacker to view all stored server files of all users. Rated high severity
Authenticated users who can create a workspace in Plane can force the application's background worker to fetch internal-
Unauthenticated remote attackers can forge Django-signed session cookies, CSRF tokens, and password-reset tokens, and by
Workspace invitation hijacking in Plane prior to 1.4.0 lets an unauthenticated attacker take over a pending workspace in
Plane is an open-source project management tool. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploi
Plane (makeplane/plane) through version 1.4.2 makes security decisions based on the client-supplied X-Forwarded-For head
Improper authorization in Plane before 1.4.0 lets an authenticated workspace Guest hijack file assets from other project
Account takeover in Plane (makeplane) versions prior to 1.4.0 allows remote unauthenticated attackers to log in as exist
Brute-forceable magic-code email login in Plane versions prior to 1.4.0 allows unauthenticated remote attackers to guess
Server-side request forgery in Plane, the open-source project management tool, allows a low-privilege user of a connecte
Authenticated cross-workspace access control bypass in Plane (makeplane/plane) before version 1.4.0 lets any user with a
EUVD-2026-92700
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB