Skip to main content

Plane EUVDEUVD-2026-31199

| CVE-2026-40102 MEDIUM
Improper Neutralization of Special Elements in Data Query Logic (CWE-943)
2026-05-20 security-advisories@github.com
6.5
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Authenticate as workspace MEMBER
  2. Delivery
    Request valid saved analytic view ID via standard API
  3. Exploit
    Send GET to SavedAnalyticEndpoint with crafted segment=workspace__owner__password
  4. Install
    Django F() traverses ORM foreign-key path
  5. C2
    .values() projects raw field data into SQL result
  6. Execute
    JSON response returns bcrypt hash and API tokens
  7. Impact
    Use harvested tokens for persistent access

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Query language parameterization
Exploitation Conditions

Requires an active authenticated session as a workspace MEMBER - the minimum membership role in Plane - on an instance running version 1.3.0 or earlier. The attacker must supply a valid analytic_id for a saved analytic view within their workspace; MEMBER-level users can enumerate their own workspace's saved views via standard API calls. The crafted segment value is delivered as a URL query parameter to the GET endpoint, requiring no special encoding or request body manipulation. Limiting factors: authentication at PR:L (CVSS-confirmed) means unauthenticated internet scanners cannot exploit this directly; the attacker must be an active workspace member; Django ORM traversal is bounded by the relationship graph of the analytics model, so not every database table is reachable - however, bcrypt password hashes, API tokens, and member email addresses are explicitly confirmed reachable by the advisory. Instances that have upgraded to v1.3.1 are not affected.

Impact

The CVSS vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N reflects low-complexity network exploitation requiring only low-privilege (workspace MEMBER) authentication, with high confidentiality impact and no integrity or availability impact - consistent with a pure data exfiltration primitive. Real-world risk is elevated beyond the moderate CVSS score of 6.5 for several compounding reasons: workspace MEMBER is the lowest privilege tier in Plane, meaning the attacker population includes any invited collaborator; the attack is a single authenticated GET request with no additional complexity; and the exfiltrated data (bcrypt hashes, API tokens, email addresses) directly enables secondary attacks such as credential stuffing, token hijacking, or targeted phishing. EPSS score was not provided in the input data and cannot be assessed. The vulnerability is not listed in CISA KEV and no public POC has been identified at time of analysis; however, the detailed public GHSA advisory makes independent reproduction straightforward. No conflicting signals between CVSS and the described attack mechanism - both confirm network-accessible, low-privilege exploitation.

Exploit ScenarioDerived

An attacker with workspace MEMBER credentials - obtained via invitation phishing, credential reuse, or an insider - sends a crafted GET request such as GET /api/workspaces/<slug>/saved-analytic-view/<analytic_id>/?segment=workspace__owner__password with a valid session token. The Django ORM resolves the traversal path, executes a JOIN against the related tables, and projects the workspace owner's bcrypt password hash directly into the JSON analytics response. The attacker iterates additional field paths (e.g., workspace__members__api_tokens__token) to enumerate API tokens across all workspace members, enabling persistent access even after password rotation. No public POC has been identified at time of analysis, but the attack is trivially reconstructable from the public GHSA-93x3-ghh7-72j3 advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 20, 2026

ORM Field Reference Injection in Plane versions 1.3.0 and below enables any authenticated workspace MEMBER to exfiltrate sensitive data - including bcrypt password hashes, API tokens, and user email addresses - via a single crafted GET request. The SavedAnalyticEndpoint omits the field allowlist validation present in the regular AnalyticsEndpoint, passing the user-supplied segment parameter directly into Django F() expressions, which then traverse foreign-key relationships and return referenced field values in the JSON response. No public exploit has been identified at time of analysis and the vulnerability is not listed in CISA KEV, but the attack is trivially reconstructable from the public GHSA-93x3-ghh7-72j3 advisory and the exfiltrated data directly enables secondary attacks.

RemediationAI

Upgrade Plane to version 1.3.1 immediately (https://github.com/makeplane/plane/releases/tag/v1.3.1). The patch centralizes field validation into VALID_ANALYTICS_FIELDS and VALID_YAXIS allowlists and adds defense-in-depth validation in both build_graph_plot() and extract_axis(), ensuring no code path can pass arbitrary field references to Django F() expressions; the missing segment allowlist check in SavedAnalyticEndpoint is explicitly addressed. If an immediate upgrade is not feasible, restrict access to the /api/workspaces/<slug>/saved-analytic-view/ endpoint family at the reverse-proxy or WAF layer - note that this only reduces exposure from external attackers and does not protect against a compromised MEMBER-level account accessing the API from within the network. There is no known configuration toggle to disable saved analytics independently of the broader analytics feature. The trade-off of blocking the endpoint is loss of saved analytics functionality for all workspace members until the patch is applied.

Affected VersionsENISA

plane < 1.3.1

Affected Packages

euvd plane fix: 1.3.1

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 Python/Django open-source project management platform. Django's F() expression allows ORM queries to reference model fields and traverse relational paths using double-underscore notation (e.g., workspace__owner__password), which the query engine resolves at SQL level against joined tables. The SavedAnalyticEndpoint passes the user-supplied segment query parameter directly into build_graph_plot(), which ultimately calls .values('dimension', 'segment') - projecting the referenced field's raw database value into the HTTP response. The regular AnalyticsEndpoint mitigated this by checking segment against an allowlist, but that guard was absent from SavedAnalyticEndpoint. CWE-943 (Improper Neutralization of Special Elements in Data Query Logic - ORM Injection) describes this root cause precisely: untrusted input influences the structural field selection of an ORM query rather than just its filter parameters, bypassing access-control boundaries at the data layer. The NVD tag 'Nosql Injection' is a misclassification; this is Django relational ORM injection, not a NoSQL database issue.

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

Vendor (github) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Primary rating from Vendor (github) · only source for this CVE.

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
May 20, 2026 - 23:02 EUVD

DescriptionCVE.org

Plane is an open-source project management tool. In versions 1.3.0 and below, SavedAnalyticEndpoint passes the user-controlled segment query parameter directly to a Django F() expression without validation (unlike the regular AnalyticsEndpoint, which checks against an allowlist), causing ORM Field Reference Injection. An authenticated workspace MEMBER can send GET /api/workspaces/<slug>/saved-analytic-view/<analytic_id>/ with a crafted segment value that is forwarded into build_graph_plot() and traverses foreign-key relationships (e.g. workspace__owner__password) before being projected via .values("dimension", "segment"), returning the referenced field values directly in the JSON response. This exposes sensitive data such as bcrypt password hashes, API tokens, and related users' email addresses, making it a stronger primitive than the related order_by injection where values are only leaked through ordering. This issue has been fixed in version 1.3.1.

Threat Intelligence Overview

EPSS Score
0.0%
Top 91% exploitable
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

NoSQL injection exploits databases that don't use traditional SQL syntax-like MongoDB, CouchDB, or Redis-by manipulating queries through unsanitized user input.

More in Plane

View all
CVE-2026-46558 HIGH POC
8.3 Jun 10

Cross-workspace authorization bypass in Plane (makeplane) prior to version 1.3.1 allows any authenticated user of one wo

CVE-2023-2268 HIGH POC
7.5 Jul 15

Plane version 0.7.1 allows an unauthenticated attacker to view all stored server files of all users. Rated high severity

CVE-2026-105636 CRITICAL
9.9 Oct 05

Authenticated users who can create a workspace in Plane can force the application's background worker to fetch internal-

CVE-2026-105641 CRITICAL
9.8 Oct 05

Unauthenticated remote attackers can forge Django-signed session cookies, CSRF tokens, and password-reset tokens, and by

CVE-2026-105639 CRITICAL
9.8 Oct 05

Workspace invitation hijacking in Plane prior to 1.4.0 lets an unauthenticated attacker take over a pending workspace in

CVE-2024-47830 MEDIUM POC
5.8 Oct 11

Plane is an open-source project management tool. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploi

CVE-2026-111869 MEDIUM POC
5.5 Oct 18

Plane (makeplane/plane) through version 1.4.2 makes security decisions based on the client-supplied X-Forwarded-For head

CVE-2026-105637 CRITICAL
9.6 Oct 05

Improper authorization in Plane before 1.4.0 lets an authenticated workspace Guest hijack file assets from other project

CVE-2026-105640 CRITICAL
9.1 Oct 05

Account takeover in Plane (makeplane) versions prior to 1.4.0 allows remote unauthenticated attackers to log in as exist

CVE-2026-105638 CRITICAL
9.1 Oct 05

Brute-forceable magic-code email login in Plane versions prior to 1.4.0 allows unauthenticated remote attackers to guess

CVE-2026-104976 HIGH
8.7 Oct 05

Server-side request forgery in Plane, the open-source project management tool, allows a low-privilege user of a connecte

CVE-2026-104966 HIGH
8.7 Oct 05

Authenticated cross-workspace access control bypass in Plane (makeplane/plane) before version 1.4.0 lets any user with a

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy