Wiz가 Google Cloud에 합류: 함께 마법을 만드는 것

CVE-2026-61599
Python 취약성 분석 및 완화

개요

CVE-2026-61599 is an unauthenticated arbitrary module import vulnerability in djust, a Phoenix LiveView-style reactive server-side rendering framework for Django. The flaw exists in versions prior to 1.0.7 and allows any unauthenticated WebSocket or SSE client to cause the server to import — and execute the top-level code of — any importable Python module by supplying a crafted dotted module path in a mount frame. It was published on June 22, 2026, and assigned a CVSS v4 base score of 8.8 (High) (GitHub Advisory).

기술적 세부 사항

The root cause is CWE-470 (Use of Externally-Controlled Input to Select Classes or Code / Unsafe Reflection): the djust live transport calls __import__(module_path, ...) using a client-supplied dotted path without first validating it against an allowlist (GitHub Advisory). The LIVEVIEW_ALLOWED_MODULES allowlist is fail-open — when the setting is unset (the framework default), the if allowed_modules: guard is skipped entirely — and even when set, it uses loose startswith matching that can be bypassed. The import and execution of top-level module code occur before the framework checks whether the resolved object is a LiveView subclass and before any per-view authentication runs. Affected sinks are python/djust/websocket.py (handle_mount), python/djust/runtime.py (ViewRuntime.dispatch_mount / _instantiate_view), and python/djust/sse.py (SSE mount). An attacker sends a mount, live_redirect_mount, url_change, or SSE mount frame with view = "<any.importable.module>.AnyName" over an unauthenticated WebSocket connection (GitHub Security Advisory).

영향

Successful exploitation enables server-side execution of arbitrary importable Python modules' import-time side effects by an unauthenticated remote client — effectively RCE-by-proxy on any host that has a side-effectful importable module (e.g., modules that spawn processes, write files, or make network calls at import time). Additionally, an attacker can cause denial of service by triggering import of expensive or recursive dependency trees ("import bombs"), and can use distinct error strings returned by the server as a module and class enumeration oracle to map the server's installed Python environment (GitHub Advisory).

악용 가능성

No public proof-of-concept exploit code has been released; the reproducer and finding writeup are retained privately by the maintainer (GitHub Security Advisory). The vulnerability requires no authentication, no privileges, no user interaction, and no special preconditions beyond a reachable djust WebSocket or SSE endpoint, making it trivially exploitable by any network-adjacent attacker. The EPSS score is 0.0 at time of publication, and there is no evidence of in-the-wild exploitation or CISA KEV catalog listing as of the disclosure date (Feedly).

착취 단계

  1. Reconnaissance: Identify web applications running djust (pip package djust < 1.0.7) by scanning for Django applications with WebSocket or SSE endpoints, or by inspecting JavaScript bundles for djust-specific frame formats.
  2. Establish unauthenticated WebSocket connection: Connect to the target's djust WebSocket endpoint (no authentication is required at the handshake level).
  3. Craft a malicious mount frame: Construct a mount, live_redirect_mount, or url_change WebSocket frame (or an SSE mount request) with the view field set to a dotted Python module path targeting a side-effectful module, e.g., view = "os.path.AnyName" or a custom payload module already present on the server's Python path.
  4. Trigger arbitrary module import: Send the crafted frame to the server. The djust framework calls __import__(module_path, ...) on the attacker-supplied path before any allowlist check or authentication, executing the module's top-level code.
  5. Achieve objective: Depending on the target module's import-time side effects, the attacker can execute arbitrary code (e.g., if a module runs shell commands at import), exfiltrate data, cause denial of service via import bombs, or enumerate installed modules via error message differences (GitHub Security Advisory).

타협의 징후

  • Network: Unexpected or high-volume WebSocket connections to the djust live transport endpoint from unauthenticated clients; SSE mount requests with unusual or non-application view parameter values containing arbitrary dotted Python module paths.
  • Logs: Django/djust application logs showing mount or live_redirect_mount frames with view values referencing modules not part of the application's LiveView definitions; repeated "not a LiveView subclass" rejection errors for unexpected module names; error strings indicating import of standard library or third-party modules (e.g., os, subprocess, importlib).
  • Process: Unexpected child processes spawned by the Django/djust server process as a result of import-time side effects (e.g., bash, curl, python, wget); unusual outbound network connections initiated by the server process.
  • File System: New or modified files in the application directory or temp directories created by import-time side effects of maliciously triggered modules (GitHub Security Advisory).

완화 및 해결 방법

Upgrade djust to version 1.0.7, which introduces a fail-closed resolution gate (djust._view_resolution.is_view_import_allowed) that only permits a client-supplied view path if its module is already loaded in sys.modules or explicitly listed in LIVEVIEW_ALLOWED_MODULES with module-segment boundary matching — and the gate runs before any __import__ call at all three vulnerable sinks (GitHub Advisory, v1.0.7 Release). As a temporary workaround for those unable to upgrade immediately, set LIVEVIEW_ALLOWED_MODULES to the narrowest possible list of modules containing your mountable LiveView classes; note that pre-patch this is mitigation only, not a complete fix, because the import still precedes the subclass check (GitHub Security Advisory).

커뮤니티 반응

The vulnerability was published to the GitHub Advisory Database on September 16, 2026, and noted on Bluesky via the CVE feed (Bluesky). No significant vendor statements beyond the maintainer's advisory or notable independent researcher commentary have been identified at this time.

추가 자료


근원이 보고서는 AI를 사용하여 생성되었습니다.

관련 Python 취약점:

CVE ID

심각도

점수

기술

구성 요소 이름

CISA KEV 익스플로잇

수정 사항이 있습니다.

게시된 날짜

CVE-2026-61599HIGH8.8
  • Python logoPython
  • djust
아니요Sep 16, 2026
CVE-2026-61596HIGH7.1
  • Python logoPython
  • djust
아니요Sep 16, 2026
CVE-2026-61588MEDIUM6.5
  • Python logoPython
  • djust
아니요Sep 16, 2026
CVE-2026-61589MEDIUM6.3
  • Python logoPython
  • djust
아니요Sep 16, 2026
CVE-2026-61597MEDIUM5.1
  • Python logoPython
  • djust
아니요Sep 16, 2026

무료 취약성 평가

클라우드 보안 태세를 벤치마킹합니다

9개의 보안 도메인에서 클라우드 보안 관행을 평가하여 위험 수준을 벤치마킹하고 방어의 허점을 식별합니다.

평가 요청

추가 Wiz 리소스

맞춤형 데모 받기

맞춤형 데모 신청하기

"내가 본 최고의 사용자 경험은 클라우드 워크로드에 대한 완전한 가시성을 제공합니다."
데이비드 에슬릭최고정보책임자(CISO)
"Wiz는 클라우드 환경에서 무슨 일이 일어나고 있는지 볼 수 있는 단일 창을 제공합니다."
아담 플레처최고 보안 책임자(CSO)
"우리는 Wiz가 무언가를 중요한 것으로 식별하면 실제로 중요하다는 것을 알고 있습니다."
그렉 포니아토프스키위협 및 취약성 관리 책임자