Executive brief
djust is a Django framework that serializes Python model objects to browsers as part of its normal operation. When developers assign Django model instances to public view attributes, djust sends the entire object to the client—including password hashes, privilege flags (like `is_staff`/`is_superuser`), API tokens, and other personally identifiable information—without filtering sensitive fields. This can expose authentication credentials and privileged user data to browser caches, logs, and network monitoring without developers realizing the full object crossed the network.
Technical details
djust's model serialization mechanism lacks a sensitive-field denylist, causing Django model instances assigned to public view attributes to be serialized in their entirety to the client. The vulnerable component is the serialization logic that converts model objects to JSON/wire format for transmission to browsers. The attack requires a low-privilege authenticated user with network access; there is no user interaction needed. An attacker can capture password hashes, privilege flags (`is_staff`, `is_superuser`), tokens, and PII by inspecting network traffic, browser caches, or stored responses. The root cause is the absence of a secure-by-default filter. Fixed in djust 1.0.7, which applies a sensitive-field denylist (password/hash/token/secret-style fields and known privilege flags are withheld) with an identity-subset fallback mechanism.
Affected products
- djust-org djust < 1.0.7
Timeline
- 2026-06-22: disclosed: Vulnerability published by johnrtipton
- 2026-06-22: patched: Fix released in djust 1.0.7