Skip to main content

djust CVE-2026-61595

| EUVDEUVD-2026-80851 HIGH
Not Failing Securely ('Failing Open') (CWE-636)
2026-09-16 https://github.com/djust-org/djust GHSA-3492-cvg7-9mr2
7.7
CVSS 3.1 · Vendor: https://github.com/djust-org/djust
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as any tenant user
  2. Delivery
    Open WebSocket/SSE live connection
  3. Exploit
    Tenant context is None on live path
  4. Execution
    Tenant manager fails open, returns unfiltered queryset
  5. Impact
    Read and exfiltrate all tenants' rows

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Fail-secure design
Exploitation Conditions

Exploitation requires a djust application older than 1.0.7 that uses the djust.tenants multi-tenancy feature AND serves data over the live path (WebSocket or SSE / LiveView-style dispatch). The attacker must be able to establish a live socket to the app (PR:L - a valid session/authenticated tenant user), after which every mount and event handler runs with get_current_tenant()==None and the manager returns unfiltered, cross-tenant data. Limiting factors: the flaw only manifests on the WS/SSE path (pure HTTP requests remained correctly tenant-scoped), the app must actually rely on djust's tenant-aware QuerySet managers for isolation, and the shared threading.local on the sync_to_async executor thread can also leak one connection's tenant into another. The vendor states there is NO workaround on the live path short of upgrading to 1.0.7; disabling STRICT_MODE does not help since the live path ignored STRICT_MODE and failed open regardless.

Impact

This is a genuine, high-priority tenant-isolation flaw rather than an inflated high-CVSS finding, though the raw score should be read carefully. The CVSS vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N = 7.7) is internally consistent with the description: network-reachable, low complexity, requires low privileges (a valid socket/session), no user interaction, and a scope change (S:C) because one tenant's socket reads OTHER tenants' data. The C:H / I:N / A:N split correctly reflects a pure confidentiality (data-disclosure) issue with no integrity or availability impact - matching the 'Information Disclosure' tag and CWE-636 (Not Failing Securely / fail-open). No EPSS score, no CISA KEV entry, and no public exploit code are present in the provided intelligence, so exploitation status is 'no public exploit identified at time of analysis'; the absence of these signals is expected for a freshly disclosed flaw in a small package and does not lower the underlying severity. The one signal that tempers real-world urgency is deployment footprint: djust is an obscure niche framework, so this is a serious bug in a low-prevalence product, meaning aggregate internet-wide risk is modest even though per-deployment impact (full cross-tenant data disclosure) is severe. No data conflicts were detected between the CVSS vector and the narrative - both agree the flaw is remote, low-privilege, confidentiality-only, and scope-changing.

Exploit ScenarioDerived

A legitimate low-privilege user of one tenant on a multi-tenant djust application opens a WebSocket or SSE 'live' connection. Because the current tenant is never bound on the live path, get_current_tenant() returns None and the tenant-aware manager fails open, returning the unfiltered queryset, so the attacker's event handlers read and receive rows belonging to every other tenant. No public exploit code is identified at time of analysis, but exploitation requires no special tooling - only interacting with the live views over an authenticated socket.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 PoC candidate (unverified) Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 16, 2026

Cross-tenant data disclosure in djust before 1.0.7 allows an authenticated low-privileged user who holds a WebSocket or SSE connection to read every tenant's rows, because the tenant-isolation manager failed open on the live path rather than rejecting the unscoped query. Only applications using the djust.tenants multi-tenancy feature and serving data over WebSocket/SSE mount or event dispatch are affected; pure HTTP requests remained correctly tenant-scoped. There is no public exploit code identified at time of analysis and the issue is not listed in CISA KEV - the vendor's fix is djust 1.0.7, and there is no workaround on the live path short of upgrading.

RemediationAI

Vendor-released patch: upgrade to djust 1.0.7, which migrates tenant storage from threading.local() to contextvars.ContextVar, binds the tenant around WS/SSE mount and every dispatch, and forces the tenant-aware QuerySet managers to fail closed (.none()) under the default STRICT_MODE. The vendor explicitly states there is no workaround on the live path short of upgrading, so the upgrade should be treated as the only real fix for affected applications; note that setting STRICT_MODE=False makes things no better, because the live path ignored STRICT_MODE and failed open regardless, and turning it off only suppresses the new S006 system check. If an upgrade cannot be deployed immediately, treat the exposure as unmitigated at the application layer and apply compensating controls with acknowledged trade-offs: disable or refuse WebSocket/SSE endpoints for the affected tenant-aware views (breaks all live/realtime functionality), restrict the live endpoints at the reverse proxy or network layer to trusted clients only (reduces but does not eliminate the risk from any authenticated user who can still reach the socket), or run affected tenants in separate deployments/databases so no single socket can reach cross-tenant rows (substantial operational cost). After upgrading, verify that system check S006 is clean and that STRICT_MODE remains enabled so the manager's fail-closed behavior stays in effect. Details and the release notes are at https://github.com/djust-org/djust/security/advisories/GHSA-3492-cvg7-9mr2 and https://github.com/djust-org/djust/releases/tag/v1.0.7.

Affected VersionsENISA

djust < 1.0.7

Affected Packages

pypi djust fix: 1.0.7

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-636 (Not Failing Securely / Failing Open). djust stored the active tenant in threading.local(), which was populated exclusively by the HTTP-only TenantMiddleware. Consequently, on the live (WebSocket/SSE) path get_current_tenant() returned None during mount and for every event handler, and the tenant-aware QuerySet manager interpreted the missing tenant as 'no filter required' - returning the unfiltered base queryset and ignoring STRICT_MODE entirely, so any socket holder could observe other tenants' rows. A secondary defect made threading.local unsafe on the sync_to_async executor thread, where the same thread-local slot is reused across connections and one connection's tenant could bleed into another's request context. The fix in 1.0.7 replaces thread-local storage with a contextvars.ContextVar that is naturally scoped per async task, binds the resolved tenant around WS/SSE mount and each dispatch, and makes both managers scope the base queryset once and fail CLOSED (.none() under the default STRICT_MODE). A new system check, S006, warns when STRICT_MODE=False so deployments do not silently lose the closed-fail safety net. Affected package is pkg:pip/djust; the vulnerability is classified under the Information Disclosure tag and is network-reachable (AV:N) with low complexity and no user interaction, with a scope change (S:C) reflecting the boundary crossing between tenants.

Know when Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/djust-org/djust) PRIMARY 7.7 HIGH
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
vuln.today AI 7.7 HIGH

Network-reachable live socket with low complexity; PR:L because a valid tenant socket is needed; S:C as one tenant reads another's data; confidentiality-only, so C:H, I:N, A:N.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N

Primary rating from Vendor (https://github.com/djust-org/djust).

CVSS VectorVendor: https://github.com/djust-org/djust

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 17:04 EUVD
CVE Published
Sep 16, 2026 - 15:32 cve.org
HIGH 7.7

DescriptionCVE.org

Impact

djust.tenants isolation was enforced only on the HTTP path. The current tenant was stored in threading.local() and set exclusively by the HTTP-only TenantMiddleware, so on the live (WebSocket/SSE) path get_current_tenant() was always None during mount and every event handler - and the tenant-aware QuerySet manager failed OPEN (returned the unfiltered queryset, ignoring STRICT_MODE), disclosing every tenant's rows to whoever held the socket. threading.local was additionally shared across connections on the sync_to_async executor thread.

Patches

Fixed in djust 1.0.7. Tenant storage moved to a contextvars.ContextVar (per async task); the resolved tenant is bound around WS/SSE mount and every dispatch; both managers scope the base queryset once and fail CLOSED (.none() under the default STRICT_MODE); and system check S006 warns when STRICT_MODE=False.

Workarounds

No workaround on the live path short of upgrading.

Technical POC Analysis

CWE-636 (Not Failing Securely / Failing Open), with a secondary CWE-862 (Missing Authorization) classification from the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 PoC candidate from github (unverified)

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

A tenant-isolation defect in the djust framework (all versions before 1.0.7) lets any low-privileged user who holds a live WebSocket or SSE connection read data belonging to every tenant on the platform, defeating the isolation guarantee customers depend on. The affected code path fails open rather than rejecting an unscoped query, so the exposure is silent - it produces no error and would not surface in existing application monitoring. Leadership should care because any organization running multi-tenant djust applications with real-time features is exposed to a cross-customer data breach with contractual, regulatory, and reputational consequences, and there is no way to close the live path short of upgrading.

Business Impact: High
Compensating Controls

Apply vendor patch (upgrade to djust 1.0.7); no workaround exists on the WebSocket/SSE live path, so until upgrade is complete the only interim mitigations are disabling or strongly restricting live real-time endpoints in multi-tenant applications and increasing monitoring of live-channel data access.

Threat Intelligence Overview

EPSS Score
0.4%
Top 68% exploitable
Prevalence
Low
obscure niche Django-style live-view framework, small pip package, unclear production adoption
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

58
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy