CVE-2026-61598: djust mass-assignment of arbitrary view attributes in update_model handler

CVE-2026-61598 · Severity: high · CVSS 4 · Published 2026-09-16

djust is a Python web framework for building interactive live views with client-server synchronization. The default `update_model` event handler, exposed on every LiveView, allows remote attackers to set any public view attribute—not just those intended for data binding. An attacker can tamper with authorization flags, business state, or account identifiers by sending crafted WebSocket events, leading to privilege escalation, unauthorized data access, or state corruption.

Technologies: djust (PyPI). Vendors: PyPI.

Quick answers

Is CVE-2026-61598 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-61598 being exploited in the wild.
How severe is CVE-2026-61598?
High severity, with a CVSS score of 4, published 16 September 2026.
Which products and versions are affected?
djust (PyPI) < 1.0.7, ECOSYSTEM:introduced=0,fixed=1.0.7.
Is there a fix for CVE-2026-61598?
Yes. djust (PyPI): upgrade to 1.0.7 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-61598 attacked?
It is attacked over the network, in a software library.
Am I affected by CVE-2026-61598?
Check whether you run djust (PyPI) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • djust (PyPI): upgrade to 1.0.7 or later
    pip install "djust>=1.0.7"

Technical details

The vulnerability is a mass-assignment / authorization bypass in the `djust.mixins.model_binding.ModelBindingMixin.update_model()` handler, which is included in the base LiveView MRO and thus exposed on every view by default. The handler accepts a client-supplied `field` name and calls `setattr()` to update a view attribute, with weak controls: a 14-entry denylist of framework internals (`FORBIDDEN_MODEL_FIELDS`), rejection of underscore-prefixed names, optional `allowed_model_fields` allowlist (defaults to None = all allowed), and existence check via `hasattr()`. This permits setting any public, existing view attribute—including authorization/ownership/business state fields never exposed via `dj-model=` bindings in the template. Attack vector is the WebSocket (`{type:event, event:"update_model", params:{field, value}}`), requires network access and (for authenticated views) a valid session. Attackers can achieve state tampering, IDOR, privilege escalation, or price/quantity manipulation. Patch: version 1.0.7 restricts the handler to only fields declared with `dj-model=` in the template or requires explicit allowlist configuration.

Affected products

  • djust-org djust < 1.0.7

Identifiers

  • CVE-2026-61598
  • GHSA-cc7c-9jff-58wj
  • PYSEC-2026-4042

Timeline

  • 2026-06-22: disclosed
  • 2026-09-16: advisory
  • 2026-06-22: patched: Version 1.0.7 released with fix

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.