ZeroHour

CVE-2026-61591

niche

Unsigned client state snapshot trusted in djust enables privilege escalation

CVSS 3.1
8.1 high
EPSS
Published
()
Modified
AI analysis

djust, a Python web framework distributed via pip, restored a client-embedded state snapshot (state_json) as trusted view state on reconnect without any integrity check in versions prior to 1.0.7 for views that opted into state snapshots. Because the snapshot was unsigned, a client of the application could edit the JSON in their page and return it in the reconnect mount frame to inject arbitrary view attributes. This allowed an attacker to escalate privilege or tamper with business state, for example by flipping is_admin to True or changing account_id or balance values held in public view attributes, which is the normal djust pattern. Applications are affected only if they run a pre-1.0.7 djust version with the opt-in state snapshot feature enabled and keep authorization or ownership data in public view attributes. No public proof-of-concept or in-the-wild exploitation is known.

What to do: Upgrade to djust 1.0.7, which signs state snapshots and rejects unsigned or forged snapshots on the back-navigation restore path. If upgrading is not immediately possible, disable state snapshots and move authorization/ownership data such as is_admin, account_id, or balance out of public view attributes. Audit any views that used snapshots for signs of tampered attribute values.

Affected
djust (Python web framework, pip)all versions prior to 1.0.7, when the opt-in state snapshot feature is enabled
Estimated exposure
nichelikely hundreds to low thousands of deployments at most (early 1.0.x-stage pip package, with only opt-in snapshot users affected) — djust is a recently released, low-adoption Python web framework with no public download counts or internet-exposed device scans available, and the flaw additionally requires the opt-in state snapshot feature to be enabled, so the affected…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Prior to version 1.0.7, for views that opt into state snapshots, the snapshot `state_json` embedded in the client page was restored on reconnect as trusted view state with no integrity check. A client could edit the unsigned `state_json` in their page and return it in the reconnect mount frame to inject arbitrary view attributes — e.g. flip `is_admin` to `True`, or change `account_id` / `balance` — escalating privilege or tampering with business state held in public view attributes (the normal djust pattern). This issue is fixed in djust 1.0.7. State snapshots are signed; unsigned or forged snapshots are rejected on the back-navigation restore path. As a workaround, do not enable state snapshots; do not hold authorization/ownership state in public view attributes.

Ecosystems
pip
Weakness
CWE-345, CWE-915
Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
GHSA
GHSA-c67v-vqrp-m5wj (high)

In the news

No ingested article mentions this CVE yet.