CVE-2026-55571
HighCVSS 8.2Exploitation Probability (EPSS)
Low risk21th percentile - higher than 21% of all known CVEs
Summary
djust prior to 1.0.4 does not close the WebSocket or clear the view instance after denying a LiveView mount due to login or permission requirements. A WebSocket client can ignore the redirect and send events that invoke @event_handler methods without authentication, enabling unauthorized sensitive reads or mutations. This issue is fixed in version 1.0.4.
Risk Assessment
An unauthorized user could gain access to sensitive data or make unauthorized changes if the application uses LiveViewConsumer and the patch is not applied.
Recommendation
It is recommended to upgrade djust to version 1.0.4. Also, ensure that all LiveView endpoints are properly secured.
Other vulnerabilities in djust
See all- CVE-2026-61594Critical
djust prior to version 1.0.7 has a vulnerability in the WebSocket transport that bypasses standard Django authorization mechanisms (such as LoginRequiredMixin, PermissionRequiredMixin, etc.) and the staff gate in the admin extension. Mount authorization is done via check_view_auth, not the View.dispatch() chain, allowing anonymous or under-privileged clients to open a WebSocket and dispatch view handlers, including admin ones.
- CVE-2026-113731Low
The find_handlers_for_template MCP tool in python/djust/mcp/server.py from 0.9.0 until 1.0.10, 1.1.7, 1.2.4, and 1.3.0rc8 accepts an existing absolute template_path and reads it without restricting the resolved path to project directories. A local MCP client can use the tool as a file existence and readability oracle and obtain substrings matching the tool's attribute pattern from files readable by the djust process.
- CVE-2026-61599High
A vulnerability in the djust library (before version 1.0.7) allows an unauthenticated WebSocket client to trigger the import of any Python module via a crafted view path. The import occurs before LiveView class verification and authentication, and the allowed modules list is fail-open by default with loose startswith matching.
- CVE-2026-61596High
djust before version 1.0.7 does not enforce per-object authorization (get_object + has_object_permission) on three render entry points: initial HTTP GET render, SPA url_change navigation, and {% live_render %} embedded child views. An authenticated user can view and act on objects they are not authorized for, a classic IDOR. This is fixed in djust 1.0.7.
- CVE-2026-61589Medium
In djust before version 1.0.7, the WebSocket path (handle_mount and ViewRuntime._build_request) rebuilds HttpRequest without HTTP_HOST, causing get_host() to default to "testserver". This leads to incorrect tenant resolution on the live path — with STRICT_MODE=False it can cause cross-tenant disclosure, and with the default it returns empty querysets. Fixed in 1.0.7.
- CVE-2026-61588Medium
In djust before version 1.0.7, assigning a Django Model instance to a public view attribute serialized the entire object to the client without a sensitive-field denylist. This sent fields such as password hashes, privilege flags (is_staff, is_superuser), tokens, and other PII to the browser. Fixed in 1.0.7.
- CVE-2026-61597Medium
Prior to version 1.0.7, many djust built-in component template tags render a developer/user-supplied URL into an href/action attribute, HTML-escaping it but never validating the URL scheme. HTML escaping prevents attribute breakout but does not neutralize a javascript: URI, so a URL like javascript:alert(document.cookie) lands verbatim in <a href="javascript:alert(document.cookie)"> and executes in the victim's session on click.
- CVE-2026-61592High
In djust prior to version 1.0.7, SSE sessions were keyed solely by a client-chosen session_id with no binding to the authenticated user. An attacker who learns a victim's session_id could connect to the message endpoint and dispatch event handlers executing with the victim's identity and state.
- CVE-2026-61591High
In djust prior to version 1.0.7, for views using state snapshots, the state_json embedded in the client page was restored on reconnect as trusted view state without integrity checks. A client could edit the unsigned state_json to inject arbitrary view attributes, such as flipping is_admin to True or changing account_id/balance.
- CVE-2026-61595High
djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Prior to version 1.0.7, djust.tenants isolation was enforced only on the HTTP path; the current tenant was stored in threading.local() and set exclusively by the HTTP-only TenantMiddleware, so on the live (WebSocket/SSE) path get_current_tenant() was always None and the tenant-aware QuerySet manager failed OPEN, disclosing every tenant's rows. This issue is fixed in djust 1.0.7.
Original NVD description (English source)
djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Prior to 1.0.4, LiveViewConsumer.handle_mount sends a `{"type":"navigate","to":...}` frame when login_required, permission_required, or a redirecting on_mount hook denies a LiveView mount, but returns without closing the WebSocket or clearing self.view_instance. A browser follows the redirect, but a raw WebSocket client can ignore it and retain the mounted socket. Because LiveViewConsumer.handle_event does not recheck authentication or authorization, the client can send `{"type":"event",...}` frames that invoke @event_handler methods without an authenticated session, including through handle_live_redirect_mount, enabling unauthorized sensitive reads or mutations. This issue is fixed in version 1.0.4.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

