CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-61591

CVE-2026-61591: State Snapshot Injection and Mass Assignment in djust Framework

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 17, 2026·6 min read·17 visits

Executive Summary (TL;DR)

Unsigned client-side state snapshots in the djust framework allow remote authenticated attackers to execute arbitrary state injection and mass assignment via tampered WebSocket frames, leading to full privilege escalation. This has been resolved in version 1.0.7 through cryptographic HMAC signatures.

CVE-2026-61591 is a high-severity state injection and authorization bypass vulnerability affecting the djust framework's opt-in State Snapshot feature. Prior to version 1.0.7, the framework restored public view state snapshots returned from the client browser during back-navigation without validating their cryptographic authenticity or integrity. This flaw allows malicious clients to manipulate serialized JSON payloads to inject unauthorized properties, leading to mass assignment (CWE-915) and privilege escalation. Version 1.0.7 addresses this issue by introducing HMAC cryptographic signatures bound to both the view configuration and the user's session identifier.

Vulnerability Overview

The djust framework is designed to provide reactive, server-side rendered application state synchronization using Django on the backend and WebSockets or Server-Sent Events (SSE) on the frontend. To optimize user navigation, particularly back-navigation, developers can configure the enable_state_snapshot attribute within their LiveView classes.\n\nWhen a client navigates back to a previously loaded view, instead of executing a standard, backend-controlled initialization path through the mount method, the client returns a serialized representation of its last known state, termed the state snapshot. This state is contained inside the state_json parameter and parsed directly by the server to reconstruct the dynamic attributes of the view interface.\n\nIn versions of the framework prior to 1.0.7, this restoration flow lacked verification mechanisms to confirm the authenticity and integrity of the client-provided state. This structural design vulnerability allows a malicious client to modify local serialized states and transmit forged properties to the server, resulting in state injection (CWE-915) and bypass of critical authorization systems.

Root Cause Analysis

The root cause of this vulnerability lies in the lack of cryptographic validation of the state snapshot before the restoration process. During typical operation, the state snapshot is sent from the client browser over a WebSocket handshake during a live_redirect_mount frame. In vulnerable releases of djust, the server-side controller parses the JSON document directly without confirming whether the payload was originally generated and signed by the server.\n\nUpon receiving the state_json payload, the server invokes internal recovery methods, which dynamically assign the properties listed in the JSON dictionary directly onto the instanced view class using an attribute setting function. While the safe_setattr wrapper prevents modification of private and special magic properties, it allows direct, unvetted modification of public variables. Because developers often store authorization variables such as user identification, administrative privilege flags, or transactional balances in these public properties, the state restoration process allows clients to override local business logic.\n\nFurthermore, because the restore workflow skips the default mount function, any verification logic implemented inside the initialization path is bypassed. This dynamic state assignment is executed purely based on client-submitted inputs, enabling attackers to execute privilege escalation or target other client contexts without needing valid credentials.

Code Analysis

The vulnerable version of djust deserialized the snapshot without any verification step. Below is the technical comparison of the insecure restoration model versus the patched implementation added in version 1.0.7 inside the file python/djust/security/state_snapshot.py.\n\npython\n# Insecure conceptual state restoration in vulnerable versions (< 1.0.7)\ndef restore_snapshot(view, client_snapshot_dict):\n # NO verification of origin or signature\n for key, value in client_snapshot_dict.items():\n # safe_setattr only prevents underscore-prefixed names\n safe_setattr(view, key, value)\n\n\nThe implementation introduced in version 1.0.7 mitigates this vulnerability by using Django's cryptographic TimestampSigner combined with a designated salt configuration (SNAPSHOT_SALT = "djust.state_snapshot"). Below is the structured representation of the secure snapshot verification module:\n\npython\n# Patched secure snapshot verification implementation in version 1.0.7\nfrom django.core import signing\nimport json\n\nSNAPSHOT_SALT = "djust.state_snapshot"\n\ndef sign_snapshot(state_json: str, view_slug: str, session_key: str) -> str:\n # Bind state to specific view and session to prevent cross-view or cross-session replay\n envelope = json.dumps({\n "slug": view_slug,\n "sid": session_key or "",\n "state": state_json\n }, sort_keys=True)\n return signing.TimestampSigner(salt=SNAPSHOT_SALT).sign(envelope)\n\n\nThe verified snapshot restoration verifies the cryptographic signature, the expiration timestamp (TTL), the matching view slug, and the active session key. If any of these validations fail, the framework throws an error or silently falls back to executing the secure, backend-controlled mount() initialization flow, entirely neutralizing injection attempts.

Exploitation Methodology

Exploitation of this vulnerability requires an attacker to interact with a web page utilizing the djust library with state snapshots enabled. The attacker identifies the presence of the snapshot feature by reviewing network transmissions or inspecting local storage structures containing the serialized state attributes.\n\nOnce a target view is identified, the attacker modifies the local plaintext JSON snapshot before a history navigation event is triggered. Alternatively, the attacker intercepts the WebSocket connection and alters the data payload of the live_redirect_mount frame. This manipulation alters the data values to grant administrative properties or target alternative account records.\n\njson\n{\n "type": "live_redirect_mount",\n "view": "myapp.views.MyDashboardView",\n "url": "/dashboard/",\n "state_snapshot": {\n "view_slug": "myapp.views.MyDashboardView",\n "state_json": "{\"is_admin\": true, \"account_id\": 1}",\n "ts": 0\n }\n}\n\n\nWhen the modified frame is transmitted to the server, the lack of signature validation causes the backend to parse the dictionary directly. The dynamic attribute loops apply the values to the active session object, granting immediate administrative permissions or access to private customer accounts.

Impact Assessment

The impact of this vulnerability is classified as High, with a CVSS v3.1 base score of 8.1. An attacker can exploit this flaw to bypass authentication logic, escalate privileges, and gain access to restricted data fields.\n\nBecause the vulnerability allows direct, unchecked attribute assignment, its exact severity is determined by the specific variables exposed inside the view instance. If an application stores financial transactions, administrative flags, or sensitive personal indicators as public attributes on its views, those values can be altered.\n\nCurrently, there is no evidence of active exploitation in the wild, and the vulnerability is not listed on the CISA KEV catalog. However, because the exploit process requires minimal sophistication, immediate application of the patch or configuration workarounds is required to protect deployment environments.

Mitigation & Fix Completeness

The primary mitigation for this vulnerability is to upgrade the djust package to version 1.0.7 or higher, which includes the cryptographic signature framework. This signature blocks unauthorized snapshot modifications by verifying authenticity on each reconnection handshake.\n\nbash\npip install --upgrade djust>=1.0.7\n\n\nIf upgrading is not feasible, organizations must disable the state snapshot feature globally by ensuring enable_state_snapshot = False is set across all application view classes. This forces the framework to initialize views through the secure server-side mount() method on every navigation event.\n\nIn addition, developers must follow secure coding practices by avoiding storing authorization flags or critical backend identifiers in public view attributes. Standardizing authorization validation using session-based variables guarantees security boundaries are enforced.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N

Affected Systems

djust framework library

Affected Versions Detail

Product
Affected Versions
Fixed Version
djust
djust-org
< 1.0.71.0.7
AttributeDetail
CWE IDCWE-345, CWE-915
Attack VectorNetwork
CVSS v3.1 Score8.1 (High)
Exploit StatusProof-of-Concept / Conceptual
KEV StatusNot Listed
Affected ComponentState Snapshot Feature (live_redirect_mount)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1548Abuse Elevation Control Mechanism
Privilege Escalation
T1565.002Data Manipulation: Transmitted Data Manipulation
Impact
CWE-345
Insufficient Verification of Data Authenticity

The software does not sufficiently verify that the state snapshot originating from the client is authentic and has not been tampered with before processing it, leading to arbitrary state injection (CWE-915).

Known Exploits & Detection

GitHub AdvisoryConceptual proof-of-concept testing suite included within the djust security regression suite verifying snapshot signature mismatches.

Vulnerability Timeline

Vulnerability patched and secure v1.0.7 update pushed by package maintainers.
2026-06-22
CVE-2026-61591 is published and analyzed by security coordinators.
2026-09-16

References & Sources

  • [1]GHSA-c67v-vqrp-m5wj: Cryptographic state-snapshot signature bypass in djust
  • [2]djust v1.0.7 Release Details and Changelog
  • [3]Patched Source Code Implementation for Secure Snapshot Serialization
  • [4]Official Regression Test Coverage verifying cryptographic verification

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-118777
4.8

CVE-2026-118777: Prototype Pollution in Forge HTTP Client Cookie Management

CVE-2026-118777 is a prototype pollution vulnerability (CWE-1321) in the Forge JavaScript cryptography and networking library (distributed on npm as node-forge) prior to version 1.4.1. The flaw resides in the forge.http client subsystem, where incoming HTTP cookie names and paths parsed from Set-Cookie response headers are stored directly into standard JavaScript objects without key validation or property isolation. By returning crafted Set-Cookie headers containing keys such as __proto__ or constructor, a malicious HTTP server can inject arbitrary properties into Object.prototype, attach attributes to the global Object constructor, or delete built-in prototype methods to cause an application-wide denial of service.

Amit Schendel
Amit Schendel
3 views•10 min read
•about 3 hours ago•CVE-2026-118775
3.7

CVE-2026-118775: ASN.1 OID First Arc Truncation and Ambiguity in node-forge

CVE-2026-118775 (GHSA-4642-5mcj-2rqw) is an integer overflow and validation flaw in the ASN.1 serialization module of Forge (node-forge) prior to version 1.4.1. The asn1.oidToDer() function fails to validate the range of the first two arcs of an Object Identifier (OID) and truncates the packed initial subidentifier to a single 8-bit integer. Applications that perform policy checks on untrusted OID strings before encoding them into Distinguished Encoding Rules (DER) format can be tricked into emitting DER bytes that correspond to a completely different, restricted OID.

Amit Schendel
Amit Schendel
6 views•10 min read
•about 4 hours ago•CVE-2026-119194
7.5

CVE-2026-119194: Algorithmic Complexity Denial of Service in pyasn1 Schemaless ASN.1 Decoder

CVE-2026-119194 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting versions 0.3.3 through 0.6.4. The flaw resides in the schemaless decoding routine ConstructedPayloadDecoderBase._decodeComponentsSchemaless used across BER, CER, and DER codecs. By sending an ASN.1 container populated with child components whose tag identifiers are separated by multiples of CPython's integer hash modulus (sys.hash_info.modulus), an unauthenticated attacker can force worst-case hash collisions in an unbounded Python set, degrading decoding performance from O(N) to O(N^2) and causing a Denial of Service (DoS).

Alon Barad
Alon Barad
5 views•9 min read
•about 5 hours ago•CVE-2026-119195
7.5

CVE-2026-119195: Quadratic-Time Denial of Service in pyasn1 BER/CER/DER Decoders

CVE-2026-119195 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting all versions prior to 0.6.5. When decoding constructed strings or indefinite-length ANY types across BER, CER, and certain DER code paths, the payload decoders repeatedly concatenate incoming fragments onto an immutable bytes object using the += operator. Because Python bytes objects cannot be resized in-place, each fragment iteration allocates a new buffer and copies all previously accumulated bytes, resulting in quadratic O(N^2) time and memory copy complexity. An unauthenticated remote attacker can supply a highly fragmented ASN.1 stream to exhaust CPU cycles and stall application worker threads.

Amit Schendel
Amit Schendel
6 views•10 min read
•about 6 hours ago•CVE-2026-119197
7.5

CVE-2026-119197: Quadratic Algorithmic Complexity Denial of Service in pyasn1 REAL Mantissa Decoder

An algorithmic complexity vulnerability (CWE-407) in pyasn1 versions prior to 0.6.5 allows unauthenticated attackers to cause a Denial of Service (DoS) via crafted ASN.1 payloads. The flaw resides in the binary-encoded ASN.1 REAL mantissa deserialization routine within RealPayloadDecoder.valueDecoder. By performing iterative byte-string slicing and repeated bitwise shifts on a growing arbitrary-precision integer, the decoder exhibits quadratic time and memory allocation complexity relative to the mantissa length. Supplying a BER-, CER-, or DER-encoded payload with a large REAL mantissa causes excessive CPU consumption and blocks application worker processes.

Amit Schendel
Amit Schendel
6 views•10 min read
•about 7 hours ago•CVE-2026-119196
7.5

CVE-2026-119196: Quadratic CPU Consumption in pyasn1 Constructed BIT STRING Decoding

A vulnerability classified under CWE-407 (Inefficient Algorithmic Complexity) exists in the pyasn1 library prior to version 0.6.5. When parsing constructed ASN.1 BIT STRING payloads under BER, CER, or schema-driven DER encoding rules, the BitStringPayloadDecoder repeatedly shifts and copies the entire accumulated bit value for each incoming fragment. Processing inputs with a large number of small constructed fragments induces quadratic CPU consumption, allowing unauthenticated remote attackers to cause a denial of service via resource exhaustion during the initial decoding phase.

Alon Barad
Alon Barad
6 views•10 min read