Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-61594

CVE-2026-61594: djust Django WebSocket Auth Bypass Vulnerability

CVE-2026-61594 is an authentication bypass flaw in djust that allows unauthorized WebSocket access by bypassing Django authorization mixins. This post explains its impact, affected versions, and mitigation steps.

Published:

CVE-2026-61594 Overview

CVE-2026-61594 is a critical authorization bypass affecting djust, a library providing Phoenix LiveView-style reactive server-side rendering for Django. Versions prior to 1.0.7 authorize WebSocket mounts through check_view_auth rather than Django's View.dispatch() chain. Standard Django authorization mixins and decorators run only on the initial HTTP GET and are silently skipped over the WebSocket transport where events and state actually flow. An unauthenticated or under-privileged client can open a WebSocket, mount a protected view, and dispatch its handlers — including admin list, create, change, and delete operations. The issue is classified under [CWE-306: Missing Authentication for a Critical Function].

Critical Impact

Anonymous WebSocket clients can bypass LoginRequiredMixin, PermissionRequiredMixin, and admin staff gates to reach protected views and admin CRUD operations.

Affected Products

  • djust versions prior to 1.0.7
  • Django applications using djust live (WebSocket) transport
  • djust admin extension relying on the HTTP as_view staff gate

Discovery Timeline

  • 2026-09-16 - CVE-2026-61594 published to NVD
  • 2026-09-16 - Last updated in NVD database

Technical Details for CVE-2026-61594

Vulnerability Analysis

The flaw stems from a divergence between djust's two transport paths. Over HTTP, djust wraps views with as_view, which invokes Django's View.dispatch() chain and honors standard authorization primitives. Over WebSocket, djust mounts the view directly and delegates authorization to check_view_auth, a shortcut that does not replay dispatch().

As a result, LoginRequiredMixin, PermissionRequiredMixin, UserPassesTestMixin, @method_decorator(login_required, name="dispatch"), and custom dispatch() guards are enforced only on the initial page load. The djust admin extension's staff gate, applied inside the HTTP as_view wrapper, is also skipped. All subsequent events and state transitions flow through the unauthenticated WebSocket path.

An attacker can connect to the WebSocket endpoint, mount a protected view — including admin list, create, change, and delete views — and dispatch its handlers as an anonymous or under-privileged user. The impact spans confidentiality and integrity of any data managed through djust-mounted views.

Root Cause

The root cause is inconsistent authorization enforcement across transports. check_view_auth did not honor the Django AccessMixin family, and the admin base mixin did not declare djust-native gates that apply to every transport. Authorization decisions expressed as dispatch()-time logic could not be safely replayed by the runtime and were silently dropped on WebSocket connections.

Attack Vector

Exploitation requires only network access to the djust WebSocket endpoint. An attacker establishes a WebSocket connection, sends a mount message referencing a protected view, and issues event messages that invoke handler methods. No authentication, user interaction, or specialized tooling is required. See the GitHub Security Advisory GHSA-xhhm-f6hp-2qwj for protocol-level details.

Detection Methods for CVE-2026-61594

Indicators of Compromise

  • WebSocket mount messages targeting admin views from sessions without an authenticated user
  • Event dispatches against protected views following mounts by anonymous clients
  • Unexpected create, change, or delete operations on models exposed through djust admin views
  • Application logs showing successful handler execution absent a preceding authenticated HTTP request

Detection Strategies

  • Correlate WebSocket connection logs with session authentication state at mount time
  • Alert on djust mount events for views protected by LoginRequiredMixin or PermissionRequiredMixin when the session is anonymous
  • Compare pre-upgrade HTTP request logs against WebSocket mount targets to spot direct mounts without a prior GET

Monitoring Recommendations

  • Enable verbose logging for the djust channel consumer and capture mount and event payloads
  • Ship Django and djust logs to a centralized SIEM for query and correlation across transports
  • Add startup validation output from the new S004 system check to build and deployment pipelines

How to Mitigate CVE-2026-61594

Immediate Actions Required

  • Upgrade djust to version 1.0.7 or later on all environments running the live transport
  • Audit every view exposed through djust for HTTP-only authorization patterns and convert them to djust-native gates
  • Review recent WebSocket traffic and database change logs for unauthorized admin activity
  • Run the S004 system check and resolve any reported auth patterns before returning to production

Patch Information

djust 1.0.7 fixes the bypass by extending check_view_auth to honor the Django AccessMixin family on every transport. A new system check, S004, fails at startup when authorization is expressed as decorators or overridden dispatch() methods that the runtime cannot safely replay. The admin base mixin now declares login_required = True and enforces an active-staff check_permissions gate. Release notes are available in the djust v1.0.7 release.

Workarounds

  • Gate views using djust's login_required, permission_required, and check_permissions attributes, which are honored on all transports
  • Avoid relying solely on @method_decorator(login_required, name="dispatch") or custom dispatch() guards for djust-mounted views
  • Restrict WebSocket endpoint exposure at the reverse proxy until the upgrade is deployed
  • Disable the djust admin extension in production if immediate patching is not feasible

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.