CVE-2026-61588 Overview
CVE-2026-61588 is an information disclosure vulnerability in djust, a library that provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Versions prior to 1.0.7 serialize Django Model instances assigned to public view attributes without applying a sensitive-field denylist. As a result, fields such as password hashes, privilege flags (is_staff, is_superuser), authentication tokens, and other personally identifiable information (PII) are transmitted to the browser. Developers relying on the standard djust pattern of exposing model objects to templates may unknowingly leak credentials and PII. The issue is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor.
Critical Impact
Password hashes, session tokens, privilege flags, and PII can be silently transmitted to any client rendering a djust view that exposes a Model instance.
Affected Products
- djust versions prior to 1.0.7
- Django applications using djust for reactive server-side rendering
- Views that assign Django Model instances to public (non-_private) view attributes
Discovery Timeline
- 2026-09-16 - CVE-2026-61588 published to NVD
- 2026-09-16 - Last updated in NVD database
Technical Details for CVE-2026-61588
Vulnerability Analysis
djust bridges Django server-side state to the browser by serializing view attributes for reactive rendering. Before version 1.0.7, the serializer treated Django Model instances as ordinary data objects. It emitted every field of the model to the client wire format. This included fields the developer never intended to expose, such as hashed passwords stored by Django's auth backend, boolean flags controlling administrative access, API tokens, email addresses, and other identity attributes.
Because exposing model objects to templates is an idiomatic djust pattern, developers had no clear signal that the full object crossed the trust boundary. The client-side payload was accessible to anyone who could load the rendered view, including authenticated low-privilege users viewing their own profile or another user's public data.
Root Cause
The root cause is missing output filtering in the model serialization path. djust lacked a secure-by-default denylist for sensitive fields. Any attribute reachable from a public view attribute was serialized in full. The library relied on implicit developer discipline rather than enforcing a safe default at the framework layer.
Attack Vector
An attacker with network access to a djust-rendered page can inspect the client payload directly. Low-privilege authenticated users can extract password hashes for offline cracking, harvest privilege flags to identify targets for privilege escalation, or capture tokens used for API authentication. No special tooling is required beyond a browser developer console or an intercepting proxy. The vulnerability affects confidentiality but does not directly impact integrity or availability.
Exploitation does not require code execution or authentication bypass. It requires only that a vulnerable view assigns a Model instance such as User to a public attribute. See the GitHub Security Advisory GHSA-pvg3-6q9j-mj3x for the coordinated disclosure details.
Detection Methods for CVE-2026-61588
Indicators of Compromise
- Client-side payloads containing serialized Django User model fields, including password, is_staff, is_superuser, or last_login
- Browser network traces from djust views showing model attributes not referenced in the template
- Application logs indicating repeated views of endpoints that render authenticated model instances by low-privilege accounts
Detection Strategies
- Audit djust view classes for public attributes (attributes not prefixed with _private) that hold Django Model instances
- Compare rendered client payloads against expected template fields and flag any additional serialized attributes
- Perform a source review for assignments such as self.user = request.user or similar patterns in djust view code
Monitoring Recommendations
- Instrument outbound response bodies from djust endpoints and alert on field names matching password, token, secret, or hash
- Track access patterns to djust views by user role and flag reconnaissance-style enumeration of user objects
- Include djust dependency versions in software composition analysis reports to catch pre-1.0.7 deployments
How to Mitigate CVE-2026-61588
Immediate Actions Required
- Upgrade djust to version 1.0.7 or later, which applies a secure-by-default sensitive-field denylist for password, hash, token, and secret-style fields plus known privilege flags
- Inventory all djust views and confirm no public attributes hold raw Django Model instances containing sensitive fields
- Rotate any credentials, session tokens, or API keys that may have been exposed through affected views
Patch Information
The fix is available in djust 1.0.7. Model serialization now applies a secure-by-default denylist that withholds password, hash, token, secret-style fields, and known privilege flags. An identity-subset fallback ensures only safe identifying fields cross the wire. Release notes are published at GitHub Release v1.0.7.
Workarounds
- Store Model instances on _private view attributes so they are not serialized to the client
- Expose only the specific fields required by the template through explicit scalar attributes
- Wrap model access with a projection helper that returns a dictionary containing only whitelisted fields
# Upgrade djust to the patched release
pip install --upgrade 'djust>=1.0.7'
# Verify the installed version
python -c "import djust; print(djust.__version__)"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

