Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as member of one project
-
ExploitRequest page-version with own project_id but another project's page_id
-
ImpactRead leaked description_html cross-project
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires the attacker to be an authenticated, active member of at least one project in the target workspace (PR:L) and to know or enumerate the page_id of a target page in a different project within that same workspace. The target page must have public access, and the deployment must host multiple projects under one workspace for the cross-project boundary to be crossable. Limiting factors: no anonymous access (valid workspace/project membership needed), the leak is read-only (no modification of cross-project pages), disclosure is confined to the same workspace and to public-access pages only, and only description_html content is exposed - not private pages or other projects' data outside the shared workspace. |
| Impact | This is a cross-project authorization flaw (IDOR, CWE-639) in Plane's PageVersionEndpoint where page-version lookups are scoped by workspace and page_id but not by the URL project_id, letting a member of one project read the description_html of public pages belonging to a different project in the same workspace. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, 6.5 MEDIUM) correctly reflects a network-reachable, low-complexity bug requiring authenticated project membership and yielding only a confidentiality impact - integrity and availability are explicitly unaffected because the path is read-only and cannot modify cross-project pages. No EPSS score, CISA KEV entry, POC, or SSVC decision data was supplied, so there is no public exploit identified at time of analysis and no evidence of active exploitation; the risk signals are therefore limited to the CVSS vector and the published fix. I assess the C:H rating as arguably overstated: disclosure is bounded to page description_html of public-access pages within a single shared workspace, which is partial rather than total confidentiality loss, so real-world impact is closer to C:L - verify sensitivity against your own page content. Net: a legitimate multi-tenant data-isolation bug worth patching, but not an emergency given authenticated prerequisites, read-only scope, and absence of any exploitation or POC signal. |
| Exploit ScenarioDerived | An authenticated user who is a member of only Project A within a shared workspace crafts a request to the page-versions endpoint using Project A's identifier in the URL while supplying the page_id of a public page that belongs to Project B. Because the permission check derives the caller's role from the URL project but resolves the page workspace-wide, the endpoint returns Project B's page version content (description_html), disclosing data the user should not see. No public exploit code is identified at time of analysis, but the attack requires only a normal API request and no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Cross-project information disclosure in Plane (open-source project management tool) before version 1.4.0 lets an authenticated member of one project read the description_html of public page versions belonging to a different project within the same workspace. The PageVersionEndpoint resolves page versions by workspace and page_id only, so supplying another project's identifier in the URL bypasses the intended project boundary - the check that the caller belongs to the URL project passes, but the object lookup ignores that project. The issue is read-only (no cross-project modification), requires active membership in at least one project of the target workspace and knowledge of the target page_id, and no public exploit code has been identified at time of analysis.
RemediationAI
Upgrade to Plane 1.4.0 or later, which is the vendor-released patch for this issue (changelog: https://github.com/makeplane/plane/releases/tag/v1.4.0). If an immediate upgrade is not possible, apply the upstream commit cfe951c8af41b0fcf1c792e5ad664d00f77709ce (PR #9380, https://github.com/makeplane/plane/pull/9380) to the PageVersionEndpoint and ProjectPagePermission so lookups are scoped by project_pages__project_id and project_pages__deleted_at__isnull=True; the same commit adds regression tests and can be backported to maintained branches. Compensating controls while unpatched: audit and reduce the number of workspaces that host multiple projects with cross-project membership (segregating projects into separate workspaces removes the boundary that can be crossed, at the cost of losing shared workspace features), and audit public-access pages via the Page.access field and restrict pages to private access where the content is sensitive (side effect: legitimate cross-team page sharing stops working). Because the flaw is read-only and limited to description_html of public pages within the same workspace, rate-limiting or monitoring of GET requests to /api/workspaces/*/projects/*/pages/*/versions/ can help detect enumeration attempts, but does not remediate the underlying authorization gap. Do not rely on disabling the endpoint entirely unless the trade-off of losing page-version history is acceptable.
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
CVE-2026-102980 is a classic Insecure Direct Object Reference / horizontal authorization defect (CWE-639) in Plane's Django REST Framework API. Two code paths were inconsistently scoped: ProjectPagePermission correctly derived the caller's role and membership from the project_id embedded in the URL, but PageVersionEndpoint in apps/api/plane/app/views/page/version.py and the page-resolution logic in apps/api/plane/app/permissions/page.py looked up Page and PageVersion objects using only workspace__slug and page_id. Because pages are linked to projects through the ProjectPage join table (a public page can be shared across visibility scopes within a workspace), a member of project A could hit /api/workspaces/{slug}/projects/{A}/pages/{page_id_of_B}/versions/ and have the permission class validate membership against project A while the queryset returned project B's page versions. The upstream fix (commit cfe951c8af41b0fcf1c792e5ad664d00f77709ce, PR 9380) adds a filter on page__project_pages__project_id equal to the URL project_id combined with project_pages__deleted_at__isnull=True, so only an active ProjectPage link for the requested project satisfies the query; a distinct() guard is added defensively because the join could otherwise produce MultipleObjectsReturned and a 500. Contract regression tests were added in test_page_version_project_scope_app.py.
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:H/I:N/A:N
Authenticated project member over the API (PR:L, AV:N, AC:L, UI:N); read-only partial disclosure of public page description_html only, so C:L and I/A:N.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
Plane is an open-source project management tool. Prior to 1.4.0, PageVersionEndpoint in apps/api/plane/app/views/page/version.py scopes page-version lookups by workspace and page identifiers but not by the project_id from the URL. ProjectPagePermission likewise derives the caller's role from the URL project while resolving the requested page workspace-wide, so a member of one project can use that project's identifier to read description_html for a public page in another project in the same workspace. The affected path is read-only and does not enable cross-project page modification. This issue is fixed in version 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-101617
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB