Skip to main content

djust CVE-2026-61594

| EUVDEUVD-2026-81303 CRITICAL
Missing Authentication for Critical Function (CWE-306)
2026-09-16 https://github.com/djust-org/djust GHSA-xhhm-f6hp-2qwj
9.1
CVSS 3.1 · Vendor: https://github.com/djust-org/djust
View

Attack ChainAIDerived

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

  1. Access
    Identify djust site with HTTP-gated live view
  2. Delivery
    Open WebSocket to view mount endpoint
  3. Exploit
    check_view_auth bypasses Django dispatch guards
  4. Execution
    Mount admin list/create/change/delete view
  5. Persist
    Dispatch handlers as anonymous user
  6. Impact
    Read 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 PoC candidate (unverified) Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

djust < 1.0.7

Affected Packages

pypi djust fix: 1.0.7

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

Vendor (https://github.com/djust-org/djust) PRIMARY 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 9.1 CRITICAL

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).

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/djust-org/djust).

CVSS VectorVendor: https://github.com/djust-org/djust

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

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 23:19 EUVD
CVE Published
Sep 16, 2026 - 21:58 github-advisory
CRITICAL 9.1

DescriptionCVE.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.

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

Why It Matters

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.

Business Impact: Severe
Compensating Controls

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

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Low
niche open-source Django live-view framework, limited production deployment
Threat Intel
1
1 sources
Social Media
4
Sightings
Data Quality
6 sources
Confidence: High

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 CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
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
Out-of-Cycle
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Very High
Technical Impact
Total

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Django

View all
CVE-2021-23336 MEDIUM POC
5.9 Feb 15

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

CVE-2017-12794 MEDIUM POC
6.1 Sep 07

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

CVE-2022-34265 CRITICAL POC
9.8 Jul 04

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

CVE-2021-35042 CRITICAL POC
9.8 Jul 02

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

CVE-2019-19844 CRITICAL POC
9.8 Dec 18

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

CVE-2026-61599 HIGH POC
8.8 Sep 16

Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE

CVE-2020-9402 HIGH POC
8.8 Mar 05

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

CVE-2016-6186 MEDIUM POC
6.1 Aug 05

Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j

CVE-2026-93456 HIGH POC
8.4 Sep 18

Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex

CVE-2026-61593 HIGH POC
8.1 Sep 16

Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros

CVE-2026-61590 HIGH POC
7.4 Sep 16

Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju

CVE-2026-61598 HIGH POC
7.1 Sep 16

Mass assignment in djust, a Django library providing Phoenix LiveView-style reactive server-side rendering, allows any c

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