Summary
CVE-2026-61594 is a critical authorization bypass vulnerability in djust, a Django library that provides Phoenix LiveView-style reactive server-side rendering. Versions prior to 1.0.7 authorize live WebSocket/SSE view mounts using a separate code path (check_view_auth) rather than Django’s standard View.dispatch() chain, allowing anonymous or under-privileged users to bypass LoginRequiredMixin, PermissionRequiredMixin, and UserPassesTestMixin protections when connecting over the live transport. The issue carries a CVSS v3.1 base score of 9.1 (Critical) and can expose restricted views and admin-level functionality to unauthenticated attackers over the network.
Technical details
- Root cause: djust’s live (WebSocket) transport enforces authorization through its own
check_view_authmechanism instead of routing requests through Django’s standardView.dispatch()chain, creating an inconsistency between HTTP and WebSocket/SSE enforcement paths. - Trigger conditions: A view relies solely on standard Django authorization mixins/decorators (e.g.,
LoginRequiredMixin,PermissionRequiredMixin,UserPassesTestMixin) that are only evaluated during the initial HTTP GET request, while the same view is also mounted over djust’s live WebSocket/SSE transport. - Attack vector: Network — an attacker establishes a WebSocket/SSE connection directly to a protected LiveView mount, without needing to authenticate via the normal HTTP flow, since Django’s dispatch-based authorization is not re-applied on that transport.
- Impact: Confidentiality and integrity are both rated High — attackers can view and interact with restricted view state and functionality, including admin operations, without valid credentials. Availability is not impacted (A:N).
Affected software
- djust (djust-org/djust) versions prior to 1.0.7
Severity
- CVSS v3.1 Base Score: 9.1 (Critical)
- Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Associated weaknesses: CWE-306 (Missing Authentication for Critical Function), CWE-862 (Missing Authorization)
Mitigation and recommended actions
- Immediate: Upgrade djust to version 1.0.7 or later, which enforces authorization consistently across HTTP and live WebSocket/SSE transports.
- If immediate patching is not possible: Do not rely solely on standard HTTP-only Django authorization patterns (
LoginRequiredMixin,PermissionRequiredMixin,UserPassesTestMixin) for LiveViews exposed over djust’s live transport. Instead, explicitly apply djust’s transport-agnostic security attributes (login_required,permission_required,check_permissions) to every LiveView that must be protected, and audit existing LiveViews to confirm access controls are enforced on the WebSocket/SSE mount path, not just the initial HTTP request.

