FICHE CVE

CVE-2026-61595

Publiée le 2026-09-16 · Dernière modification le 2026-09-16

🇫🇷 EN BREF

Les applications utilisant des versions de `djust` antérieures à la 1.0.7 pour fournir le rendu réactif de Django sont concernées. Un utilisateur authentifié peut contourner l'isolation des locataires (tenants) via des connexions WebSocket ou SSE pour consulter les données appartenant à tous les autres locataires du système. Cette exploitation est facile à réaliser via un réseau et ne nécessite l'interaction d'aucun autre utilisateur.

CVSS 3.17.7 ÉLEVÉE
Publiée2026-09-16
Dernière modification2026-09-16

DÉTAIL DU VECTEUR CVSS

Vecteur d'attaqueRéseau
Complexité d'attaqueFaible
Privilèges requisFaibles
Interaction utilisateurAucune
PortéeModifiée
Impact sur la confidentialitéÉlevé
Impact sur l'intégritéAucun
Impact sur la disponibilitéAucun

RÉFÉRENCES

Description officielle du NVD (en anglais)

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.