{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-61595","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","state":"PUBLISHED","assignerShortName":"GitHub_M","dateReserved":"2026-07-10T17:12:17.238Z","datePublished":"2026-09-16T15:33:40.579Z","dateUpdated":"2026-09-16T18:35:16.208Z"},"containers":{"cna":{"title":"djust: Multi-tenant isolation fails open on the WebSocket/SSE path, disclosing other tenants' data","problemTypes":[{"descriptions":[{"cweId":"CWE-636","lang":"en","description":"CWE-636: Not Failing Securely ('Failing Open')","type":"CWE"}]},{"descriptions":[{"cweId":"CWE-862","lang":"en","description":"CWE-862: Missing Authorization","type":"CWE"}]}],"metrics":[{"cvssV3_1":{"attackComplexity":"LOW","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":7.7,"baseSeverity":"HIGH","confidentialityImpact":"HIGH","integrityImpact":"NONE","privilegesRequired":"LOW","scope":"CHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N","version":"3.1"}}],"references":[{"name":"https://github.com/djust-org/djust/security/advisories/GHSA-3492-cvg7-9mr2","tags":["x_refsource_CONFIRM"],"url":"https://github.com/djust-org/djust/security/advisories/GHSA-3492-cvg7-9mr2"},{"name":"https://github.com/djust-org/djust/releases/tag/v1.0.7","tags":["x_refsource_MISC"],"url":"https://github.com/djust-org/djust/releases/tag/v1.0.7"}],"affected":[{"vendor":"djust-org","product":"djust","versions":[{"version":"< 1.0.7","status":"affected"}]}],"providerMetadata":{"orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","shortName":"GitHub_M","dateUpdated":"2026-09-16T15:33:40.579Z"},"descriptions":[{"lang":"en","value":"djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Prior to version 1.0.7, `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. This issue is 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`. No known workarounds are available on the live path."}],"source":{"advisory":"GHSA-3492-cvg7-9mr2","discovery":"UNKNOWN"}},"adp":[{"metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-09-16T18:18:43.770267Z","id":"CVE-2026-61595","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2026-09-16T18:35:16.208Z"}}]}}