CVE-2026-40102
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.
Leer descripción completaMostrar menos
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.
CVSS
- Versión: 3.1
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
- Puntuación base: 6.5
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.41%
- Percentil entre todas las CVEs puntuadas: 33
- Fecha de la puntuación: 5/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
CWE
- CWE-943
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-40102",
"cveTags": [],
"metrics": {
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-40102",
"role": "CISA Coordinator",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"version": "2.0.3",
"timestamp": "2026-05-21T14:05:56.556487Z"
}
}
],
"cvssMetricV31": [
{
"type": "Secondary",
"source": "security-advisories@github.com",
"cvssData": {
"scope": "UNCHANGED",
"version": "3.1",
"baseScore": 6.5,
"attackVector": "NETWORK",
"baseSeverity": "MEDIUM",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"integrityImpact": "NONE",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"availabilityImpact": "NONE",
"privilegesRequired": "LOW",
"confidentialityImpact": "HIGH"
},
"impactScore": 3.6,
"exploitabilityScore": 2.8
}
]
},
"affected": [
{
"source": "security-advisories@github.com",
"affectedData": [
{
"vendor": "makeplane",
"product": "plane",
"versions": [
{
"status": "affected",
"version": "< 1.3.1"
}
]
}
]
}
],
"published": "2026-05-20T22:16:37.130",
"references": [
{
"url": "https://github.com/makeplane/plane/releases/tag/v1.3.1",
"tags": [
"Product",
"Release Notes"
],
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/makeplane/plane/security/advisories/GHSA-93x3-ghh7-72j3",
"tags": [
"Exploit",
"Vendor Advisory"
],
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/makeplane/plane/security/advisories/GHSA-93x3-ghh7-72j3",
"tags": [
"Exploit",
"Vendor Advisory"
],
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
}
],
"vulnStatus": "Analyzed",
"weaknesses": [
{
"type": "Secondary",
"source": "security-advisories@github.com",
"description": [
{
"lang": "en",
"value": "CWE-943"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "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."
},
{
"lang": "es",
"value": "Plane es una herramienta de gestión de proyectos de código abierto. En las versiones 1.3.0 e inferiores, SavedAnalyticEndpoint pasa el parámetro de consulta 'segment' controlado por el usuario directamente a una expresión F() de Django sin validación (a diferencia del AnalyticsEndpoint regular, que verifica contra una lista de permitidos), causando una Inyección de Referencia de Campo ORM. Un MIEMBRO de espacio de trabajo autenticado puede enviar GET /API/workspaces/<slug>/saved-analytic-view/<analytic_id>/ con un valor 'segment' manipulado que se reenvía a build_graph_plot() y atraviesa relaciones de clave externa (p. ej., workspace__owner__password) antes de ser proyectado a través de .values('dimension', 'segment'), devolviendo los valores de campo referenciados directamente en la respuesta JSON. Esto expone datos sensibles como hashes de contraseña bcrypt, tokens API y direcciones de correo electrónico de usuarios relacionados, lo que lo convierte en una primitiva más fuerte que la inyección 'order_by' relacionada donde los valores solo se filtran a través del ordenamiento. Este problema ha sido solucionado en la versión 1.3.1."
}
],
"lastModified": "2026-07-23T15:10:00.137",
"configurations": [
{
"nodes": [
{
"negate": false,
"cpeMatch": [
{
"criteria": "cpe:2.3:a:plane:plane:*:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "A9A615E7-04A3-47E9-9C21-A421BC836221",
"versionEndExcluding": "1.3.1"
}
],
"operator": "OR"
}
]
}
],
"sourceIdentifier": "security-advisories@github.com"
}