Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach unauthenticated public issues endpoint
-
ExploitSupply crafted group_by/sub_group_by field path
-
ImpactTrigger unhandled ORM FieldError (HTTP 500) or blind relational-traversal oracle
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Query language parameterization
|
| Exploitation Conditions | Exploitation requires that the target run Plane prior to 1.4.0 AND expose the unauthenticated public issues endpoint - i.e., the Spaces feature publishing a project/issue view publicly must be enabled and network-reachable. Given that endpoint, no authentication, credentials, or user interaction are needed: the attacker simply adds group_by/sub_group_by query parameters with arbitrary ORM field paths, which bypassed the earlier order_by allowlist sanitization. Limiting factors that reduce real-world risk: the endpoint must actually be published publicly (deployments that never expose Spaces are not reachable this way), and impact is bounded to HTTP 500 errors and a blind relational-traversal oracle - the description confirms no direct column-value disclosure. |
| Impact | Signals are consistent and point to a genuine-but-moderate issue rather than a top-priority emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, base 5.3) correctly captures an unauthenticated, network-reachable, low-complexity flaw whose only direct impact is limited availability (an HTTP 500 per crafted request) - there is no confirmed confidentiality or integrity impact. This matches the description, which explicitly states the bug does NOT directly disclose column values because issue_group_values() returns an empty list for unknown fields, projection uses a fixed required_fields list, and the subgrouped path raises KeyError before serialization. The secondary 'blind relational-traversal oracle' is an inference-side channel (error/behavior differences on __-separated paths), not a direct dump, so C:N is defensible though it slightly understates the oracle's information-leak potential. KEV status is NOT present in the input, so this is not confirmed as actively exploited. EPSS is MISSING from the input and cannot be weighed. The GitHub security advisory and its regression tests describe concrete PoC payloads (e.g., group_by=state_id&sub_group_by=created_by__password), indicating exploit knowledge is public. Net: real, trivially triggerable by anonymous users, but low blast radius (single-request errors / blind oracle) keeps this below drop-everything urgency; prioritize patching for internet-exposed public-issue (Spaces) deployments. |
| Exploit ScenarioDerived | An anonymous attacker locates a Plane deployment exposing the public issues (Spaces) endpoint and issues a GET request with crafted group_by or sub_group_by values such as created_by__password or workspace__secret_key. Invalid field names trigger an unhandled FieldError/KeyError and an HTTP 500, while __-separated relational paths can be abused as a blind traversal oracle to infer ORM relationships. PoC payloads for exactly this are documented in advisory GHSA-wwgj-929g-42cm and its regression tests; no special tooling, authentication, or user interaction is required. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Improper handling of grouping query fields in Plane (the open-source project management tool) versions prior to 1.4.0 allows an unauthenticated remote attacker to send arbitrary ORM field names through the public issues endpoint's group_by and sub_group_by parameters, producing unhandled FieldError/KeyError conditions and repeated HTTP 500 responses, or using the resulting error behaviour as a blind relational-traversal oracle. The vulnerable path is the publicly published Spaces endpoint, so only deployments that expose that endpoint over the network are reachable; no credentials or user interaction are required (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, 5.3, CWE-943), and the confirmed impact is limited to availability/error-oracle exposure rather than direct column-value disclosure. The flaw is not listed in CISA KEV and no EPSS score was provided; the vendor advisory contains a proof-of-concept request (group_by=state_id&sub_group_by=created_by__password) demonstrating the parameter combination, so publicly available exploit demonstration code exists, and the issue is fixed in Plane 1.4.0.
RemediationAI
Upgrade to Plane 1.4.0 or later, the vendor-released patch version that adds the ISSUE_GROUP_BY_ALLOWLIST and enforces group_by/sub_group_by validation in BasePaginator.paginate() with an HTTP 400 rejection instead of an ORM lookup. Until upgrading, the most effective compensating control is to not publish project/issue views through Spaces on internet-reachable instances, or to restrict network access to the public issues endpoint at the reverse proxy/firewall (for example, blocking anonymous access to the public Spaces API paths); the trade-off is loss of the intended public sharing functionality, whereas a WAF rule rejecting unknown or __-containing group_by/sub_group_by parameter values provides partial coverage but can be bypassed by encoding variants and is not equivalent to the allowlist fix. No backport or detached fix is documented, so upgrade is preferred; consult the advisory at https://github.com/makeplane/plane/security/advisories/GHSA-wwgj-929g-42cm and the release notes at https://github.com/makeplane/plane/releases/tag/v1.4.0 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 a Django/DRF application, and this is a query-language field-name injection (CWE-943: Improper Neutralization of Special Elements in Data Query Logic). The public issues endpoint accepted the group_by and sub_group_by query parameters and passed them without validation into GroupedOffsetPaginator and SubGroupedOffsetPaginator, where the supplied strings were used directly as ORM field names in F(field), .values(field), .order_by(field) and Window partition_by operations. An unauthenticated caller could therefore supply non-existent fields (triggering an unhandled FieldError/KeyError and a 500), or supply __-separated relational paths that the ORM resolves against the schema, effectively turning the endpoint into a blind traversal oracle. This is the same class of bug previously remediated for order_by (GHSA-2r95 / GHSA-w45q), but that fix left group_by/sub_group_by unvalidated. The 1.4.0 patch introduces a strict ISSUE_GROUP_BY_ALLOWLIST frozenset (state_id, state__group, priority, labels__id, assignees__id, issue_module__module_id, cycle_id, project_id, created_by, target_date, start_date) and enforces it centrally in BasePaginator.paginate(), the single chokepoint through which the public Spaces endpoint and five authenticated issue/cycle/module/workspace endpoints funnel, returning an HTTP 400 ParseError instead of reaching the ORM; regression tests in plane/tests/unit/utils/test_paginator.py and test_order_queryset.py assert that injection-style values such as created_by__password and workspace__secret_key are rejected. Disclosure is bounded because issue_group_values() returns an empty list for unknown fields, the result projection uses a fixed required_fields list, and the subgrouped path raises KeyError before serialization.
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:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Anonymous network request against a public endpoint with no user interaction gives AV:N/AC:L/PR:N/UI:N; impact is limited to per-request HTTP 500 errors (A:L) with no confirmed direct data disclosure (C:N/I:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Plane is an open-source project management tool. Prior to 1.4.0, the unauthenticated public issues endpoint accepts group_by and sub_group_by query parameters and passes them without an allowlist to grouped paginators, where they are used as ORM field names by F(field), .values(field), .order_by(field), and Window partition_by operations. An anonymous attacker can supply arbitrary field paths that trigger an unhandled FieldError or KeyError and an HTTP 500 response, or force the ORM to resolve __-separated relational paths as a blind traversal oracle. This is the same field-name injection class addressed by earlier order_by sanitization, but that remediation left group_by and sub_group_by unvalidated. The issue does not directly disclose column values because issue_group_values() returns an empty list for unknown fields, the result projection uses a fixed required_fields list, and the subgrouped path raises KeyError before serialization. This issue 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
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-92480
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB