Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain local MCP stdio session as djust user
-
ExploitCall find_handlers_for_template with absolute path
-
ExecutionPath read without template-dir containment
-
ImpactConfirm file existence/readability and leak dj-* substrings
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an active local MCP (Model Context Protocol) client session connected over stdio to the djust MCP server (python/djust/mcp/server.py) running as the same operating-system user; there is no network listener, so remote exploitation is not possible. The attacker must be able to invoke the find_handlers_for_template tool with an absolute template_path, and disclosure is limited to (a) whether the target file exists and is readable by the djust process and (b) substrings matching the dj-click/dj-submit/dj-change/dj-input/dj-keydown/dj-keyup attribute pattern - not arbitrary raw file contents. Key limiting factors: local-only access, the shared-user trust boundary (the attacker already runs with the victim's privileges), and the narrow pattern-matched output rather than full file read. Affects djust from 0.9.0 before 1.0.10, 1.1.x before 1.1.7, 1.2.x before 1.2.4, and 1.3.0.dev before 1.3.0rc8. |
| Impact | This is a low-priority, genuinely low-real-risk issue, and the signals are internally consistent rather than conflicting. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N = 3.3 Low) correctly reflects a local, low-privilege information-disclosure flaw with no integrity or availability impact. The maintainer (GitHub Security Advisory GHSA-r57g-mc79-8hj2) explicitly notes the MCP server communicates over local stdio as the same OS user with no network listener, which aligns with AV:L and makes remote exploitation impossible. No EPSS score was supplied in the input, there is no CISA KEV listing, and no public exploit was referenced - so there is no public exploit identified at time of analysis and no evidence of active exploitation. The confidentiality impact is further constrained: the tool does not return arbitrary raw file contents but only a file-existence/readability oracle plus substrings matching the narrow dj-click/dj-submit/dj-change/dj-input/dj-keydown/dj-keyup attribute pattern, which justifies C:L rather than C:H. Bottom line: a real but minor defect-in-depth fix for a developer tooling component, not an operational emergency. Note: no EPSS value was present in the provided data, so probabilistic exploitation likelihood could not be cross-referenced. |
| Exploit ScenarioDerived | A local actor (or a malicious/compromised MCP client already running as the same OS user as the djust developer) invokes the find_handlers_for_template MCP tool with crafted absolute paths to probe whether arbitrary files on disk exist and are readable by the djust process, and to extract any dj-*-attribute-shaped substrings from them. Because the vector is local (AV:L) and low-complexity (AC:L) but requires an already-connected local MCP session, impact is confined to limited information disclosure. No public proof-of-concept was referenced in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Path traversal in the djust MCP server's find_handlers_for_template tool (affected versions 0.9.0 through before 1.0.10, 1.1.x before 1.1.7, 1.2.x before 1.2.4, and 1.3.0.dev before 1.3.0rc8) allows a local MCP client to supply an arbitrary absolute template_path, which the tool reads without confining resolution to the project or configured template directories. Rather than full file disclosure, the tool acts as a file existence/readability oracle and leaks only substrings matching the dj-click, dj-submit, dj-change, dj-input, dj-keydown, or dj-keyup attribute pattern - a narrow, pattern-filtered exposure reflected in the low CVSS 3.3 score (AV:L/PR:L, C:L only). Exploitation requires an already-connected local stdio MCP session running as the same OS user with no network listener, so the attacker effectively already holds the victim's privileges; no public exploit code was identified at time of analysis and there is no confirmed active exploitation (CISA KEV).
RemediationAI
Vendor-released patch: upgrade to djust 1.0.10, 1.1.7, 1.2.4, or 1.3.0rc8 (or later on the matching branch); the fix commits 45a5045793ebe7c9c2df86b0ad34275af6822619, 744bccf699c65c815d9379b36236a7c5592a339b, 85eed7caaf620bdb08986f2f3bb79432c0d3d715 and a62caf6b4ef540ad688d4dfdfa407ff914c78728 introduce a realpath/commonpath containment helper used by both find_handlers_for_template and seed_fixtures, and details are in GHSA-r57g-mc79-8hj2. Where an upgrade cannot be scheduled immediately, because the server is stdio-only and runs as the invoking OS user, the meaningful compensating controls are access-control rather than network ones: only attach trusted MCP clients to the djust MCP server (an untrusted client is equivalent to handing over the user's read permissions within the pattern-filtered scope), and run the server under a dedicated low-privilege account so that any traversal reaches only files that account could already read - the trade-off being that this requires changing how the development or CI workflow launches the server. Avoid exposing absolute template_path values through prompt-injectable client input, and set settings.BASE_DIR explicitly, since the patched seed_fixtures refuses to load anything without it (an unpatched instance with BASE_DIR unset performs no fixture path validation at all). Finally, audit for other callers that use startswith()-style string prefix checks for path confinement and replace them with component-wise comparison.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
djust brings Phoenix LiveView-style reactive server-side rendering to Django with Rust-backed performance, and ships an MCP (Model Context Protocol) server in python/djust/mcp/server.py that speaks JSON-RPC over local stdio. The affected tool, find_handlers_for_template, accepted an absolute filesystem path, passed it through and read it without validating that the realpath fell inside the directories served by the configured Django template engines or inside settings.BASE_DIR. Because the returned data is filtered to dj-* event-attribute patterns, the primitive is an oracle (does this file exist and is it readable by the djust process) plus fragmentary attribute-string disclosure, matching CWE-22 (Improper Limitation of a Pathname to a Restricted Directory). The upstream fix introduces a shared containment helper, _path_within, which normalizes both the candidate and every root with os.path.realpath (following symlinks and '..' segments) and compares with os.path.commonpath over whole path components; _template_roots() collects directories from each Django template backend's template_dirs, nested template_loaders, and BASE_DIR. The same commit also repairs a sibling flaw in seed_fixtures, where a naive startswith() prefix check let /app-data pass for a BASE_DIR of /app and skipped validation entirely when BASE_DIR was unset - that tool now requires BASE_DIR and refuses to load fixtures without it.
Know when Django 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:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Local stdio-only access with no network listener gives AV:L; requires an existing same-user MCP client session (PR:L); only limited oracle/substring disclosure yields C:L, I:N, A:N.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. From 0.9.0 until 1.0.10, 1.1.7, 1.2.4, and 1.3.0rc8, the find_handlers_for_template MCP tool in python/djust/mcp/server.py accepts an existing absolute template_path and reads it without restricting the resolved path to the project or configured template directories. A local MCP client can use the tool as a file existence and readability oracle and can obtain substrings that match the tool's dj-click, dj-submit, dj-change, dj-input, dj-keydown, or dj-keyup attribute pattern from files readable by the djust process. The maintainer assessment states that the MCP server communicates over local stdio as the same operating-system user and has no network listener, and the tool does not return arbitrary raw file contents. This issue is fixed in versions 1.0.10, 1.1.7, 1.2.4, and 1.3.0rc8.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9
In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. Rated critical severity (CVSS 9.8), this vulne
Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input
Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. Rated critical severity (CVSS 9.8
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti
Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE
Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a
Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j
Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex
Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros
Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju
EUVD-2026-106855
GHSA-r57g-mc79-8hj2
NVD
CVE.org
EPSS
Exploit-DB