Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify djust site with HTTP-gated live view
-
DeliveryOpen WebSocket to view mount endpoint
-
Exploitcheck_view_auth bypasses Django dispatch guards
-
ExecutionMount admin list/create/change/delete view
-
PersistDispatch handlers as anonymous user
-
ImpactRead and modify protected records
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication required for critical functions
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable only when a djust live view (djust < 1.0.7) is protected using HTTP-only Django authorization - LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin, @method_decorator(login_required, name="dispatch"), a custom overridden dispatch() guard, or the djust admin extension's staff gate applied in the HTTP as_view wrapper. Those guards run on the initial HTTP GET but are silently skipped on the WebSocket/SSE mount path, so an anonymous or under-privileged client reaches the same view over WebSocket. The exploitation LIMITER is the auth pattern: applications that gate views with djust's transport-agnostic login_required / permission_required / check_permissions attributes are NOT affected. Otherwise no authentication, privileges, or user interaction is required, and the vector is remote (network WebSocket). |
| Impact | This is a genuine high-priority authorization/authentication bypass. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N, 9.1) is internally consistent with the description: an anonymous, network-based client can open a WebSocket, mount a djust live view - including admin list/create/change/delete - and dispatch its handlers, yielding both confidentiality and integrity impact with no privileges or user interaction. The core signals align rather than conflict: CWE-306 (missing authentication for a critical function), PR:N, and the vendor's own account of a 'silent bypass' all point the same direction. Tempering the raw score: no EPSS score was provided, the CVE is NOT in CISA KEV, and no public exploit code was supplied - so there is no evidence of active or automated exploitation, and the real-world blast radius is bounded by the small deployment footprint of djust. The bug is also conditional (see exploitation_conditions): it only bites applications that gate live views with HTTP-only Django mixins/decorators or the djust admin extension, not those already using djust's transport-agnostic auth attributes. Net: architecturally severe and trivially exploitable where present, but exploitation is opportunistic/targeted rather than mass-scale given the niche product. |
| Exploit ScenarioDerived | An unauthenticated attacker who knows a target site runs djust (< 1.0.7) with a live view protected only by Django's LoginRequiredMixin/PermissionRequiredMixin or the djust admin staff gate opens a WebSocket to that view's mount endpoint. Because the WebSocket transport authorizes via check_view_auth instead of Django's View.dispatch() chain, the HTTP-only guard is skipped, and the attacker mounts the admin change/delete view and dispatches handlers to read or modify records. No public proof-of-concept was provided in the intelligence, so exploitation would require reproducing the mount flow from the advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenticated remote attackers mount any view over the WebSocket/SSE transport even when that view is protected by standard Django guards such as LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin, @method_decorator(login_required, name="dispatch"), a custom dispatch() override, or the djust admin extension's staff gate. Because djust authorizes WebSocket mounts through its own check_view_auth helper instead of Django's View.dispatch() chain, those HTTP-only guards are enforced on the initial GET but silently skipped where all events and application state actually flow, so an anonymous or under-privileged client can invoke handlers - including admin list, create, change, and delete operations. The CVSS vector (AV:N/AC:L/PR:N/UI:N/C:H/I:H/A:N, 9.1) confirms the attack is remote and requires no authentication or user interaction, making this a high-priority flaw; no public exploit code has been identified at time of analysis, and the issue is not listed in CISA KEV. Exploitation is limited to deployments that gate live views with HTTP-only Django authorization patterns - applications using djust's own transport-agnostic login_required, permission_required, or check_permissions attributes are unaffected.
RemediationAI
Upgrade to djust 1.0.7 or later (release: https://github.com/djust-org/djust/releases/tag/v1.0.7) - in that version check_view_auth honors the Django AccessMixin family on every transport, a new S004 system check aborts startup when it detects auth patterns the runtime cannot safely replay (decorator-based or overridden dispatch() forms), and the admin base mixin declares login_required = True with an active-staff check_permissions gate. If an immediate upgrade is not possible, convert affected views to djust's transport-agnostic authorization attributes - login_required, permission_required, and check_permissions - which are honored on all transports, and remove reliance on LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin, @method_decorator(login_required, name="dispatch"), and custom dispatch() overrides for any view exposed over WebSocket; note this workaround requires auditing and editing each affected view and does not protect views you overlook, and it also leaves the admin extension's HTTP-only staff gate unpatched. As additional compensating controls, disable or do not expose the WebSocket/SSE endpoint where feasible (for example by restricting the live-view route in the URL configuration or blocking the WebSocket path at the reverse proxy), which eliminates the bypass at the cost of losing all real-time functionality, and restrict the djust admin extension routes to trusted networks or authenticated sessions at the proxy layer, which reduces exposure but is not a substitute for the framework fix.
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 extends Django with server-driven live views rendered over a persistent WebSocket (and SSE) transport. In a conventional Django application, permission enforcement happens inside the View.dispatch() method chain, which is why mixins (LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin) and decorators applied to dispatch are effective. djust's live transport does not route through dispatch(); it authorizes a client's attempt to mount a view via an internal helper, check_view_auth, which in affected versions only understood djust's own declarative auth attributes and did not replay the Django AccessMixin family or overridden dispatch logic. This is a classic CWE-306 (Missing Authentication for Critical Function) instance: the authentication control exists, but is bound to a code path (HTTP as_view wrapper) that the WebSocket/SSE event path does not traverse, so the same logical view is reachable unauthenticated through a second protocol. The root cause is a transport-specific authorization decision rather than a cryptographic or injection flaw; anything the affected view can do - including djust admin list/create/change/delete handlers - is reachable by an anonymous WebSocket client. The affected package is the pip distribution pkg:pip/djust (all releases below 1.0.7).
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:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Anonymous remote WebSocket mount bypasses auth (PR:N/AC:L/AV:N/UI:N) reaching admin read and create/change/delete (C:H/I:H); no direct availability impact (A:N), same security scope (S:U).
Primary rating from Vendor (https://github.com/djust-org/djust).
CVSS VectorVendor: https://github.com/djust-org/djust
Lifecycle Timeline
2DescriptionCVE.org
Impact
The live (WebSocket) transport authorizes a mount via check_view_auth, not Django's View.dispatch() chain. As a result, standard Django authorization - LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin, @method_decorator(login_required, name="dispatch"), and custom dispatch() guards - and the djust admin extension's staff gate (applied only in the HTTP as_view wrapper) were enforced on the initial HTTP GET but silently bypassed over WebSocket, where all events and state flow. An anonymous or under-privileged client could open a WebSocket and mount such a view - including admin list/create/change/delete - and dispatch its handlers.
Patches
Fixed in djust 1.0.7. check_view_auth now honors the Django AccessMixin family on every transport; a new system check S004 fails loud at startup on auth patterns the runtime cannot safely replay (decorator/overridden-dispatch forms); and the admin base mixin declares login_required = True + an active-staff check_permissions gate.
Workarounds
Gate views using djust's login_required / permission_required / check_permissions attributes (honored on all transports) rather than HTTP-only mixins/decorators.
Articles & Coverage 1
Technical POC Analysis
The flaw is missing authentication/authorization for a critical function, primary CWE-306; the advisory also lists CWE-862.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
The djust Python live-view framework (versions prior to 1.0.7) has a critical authentication and authorization bypass that lets unauthenticated remote attackers reach protected views and invoke admin-level list, create, change, and delete operations over WebSocket/SSE. Organizations using djust for live views face unauthorized data exposure and integrity loss, and no vendor-released patch identified at time of analysis while no public exploit identified at time of analysis. Leadership should treat this as a severe business risk until a fixed djust release is confirmed and compensating controls are in place.
No vendor-released patch identified at time of analysis. Interim mitigations include disabling or restricting djust WebSocket/SSE transports to trusted networks; enforcing authentication and authorization at the WebSocket/SSE handshake or reverse proxy before djust's check_view_auth; adding a custom middleware or connection-level permission check that validates Django session and admin/staff status; monitoring logs for unauthenticated mount attempts and admin list/create/change/delete activity; applying WAF rules to block anomalous WebSocket/SSE traffic; and temporarily using standard Django HTTP views for sensitive or admin functionality until a fixed djust release is available.
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.
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
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
Mass assignment in djust, a Django library providing Phoenix LiveView-style reactive server-side rendering, allows any c
EUVD-2026-81303
GHSA-xhhm-f6hp-2qwj
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB