🇰🇷 한글 설명
djust 1.0.7 미만 버전에서 WebSocket을 통한 HttpRequest 재구성 시 HTTP_HOST가 누락되어 테넌트 식별이 잘못되는 취약점이 존재합니다. 이로 인해 STRICT_MODE가 False로 설정된 경우 다른 테넌트의 데이터가 노출되는 교차 테넌트 데이터 유출 사고가 발생할 수 있습니다.
💡 쉬운 설명
웹사이트의 보안 설정 오류로 인해, 사용자가 자신의 데이터가 아닌 다른 사용자의 정보를 볼 수 있는 위험이 있습니다. 특히 특정 설정이 꺼져 있을 때 다른 사람의 정보가 섞여 나올 수 있습니다.
🇺🇸 원문 (English)
djust provides Phoenix LiveView-style reactive server-side rendering for Django with Rust-powered performance. Prior to version 1.0.7, the WebSocket `handle_mount` and `ViewRuntime._build_request` rebuild an `HttpRequest` via `RequestFactory().get(...)` with no `HTTP_HOST`, so `request.get_host()` defaulted to `"testserver"` on the live path. Host/subdomain/domain `TenantResolver`s then misresolved the tenant — `None` on the live path while the HTTP path resolved correctly. With `STRICT_MODE=False` the tenant-scoped managers returned unscoped rows (cross-tenant disclosure); with the default they returned an empty queryset (broken tenancy). This is fixed in djust 1.0.7. The handshake Host is extracted from the ASGI scope, validated against `ALLOWED_HOSTS` (the same logic as the CSWSH Origin gate, parsed with Django's `split_domain_port` so malformed Hosts are rejected at the boundary), and propagated — with the TLS scheme — into the reconstructed request, so live-path tenant resolution matches HTTP exactly. There is no known workaround on the live path short of upgrading. Users are most exposed when combined with `STRICT_MODE=False`.
📍 영향받는 시스템
djust version 1.0.7 미만
⚔️ 공격 벡터
WebSocket 연결 과정에서 잘못된 호스트 정보로 인해 테넌트 식별 로직을 우회하여 타인의 데이터에 접근
🛡️ 대응 방법
djust를 1.0.7 버전 이상으로 업그레이드하고, 가능한 경우 STRICT_MODE를 True로 설정
🔧 검증 코드
출력된 버전이 1.0.7 미만이면 취약한 상태입니다.
pip show djust | grep Version