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).
착취 단계
- 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. - Establish unauthenticated WebSocket connection: Connect to the target's djust WebSocket endpoint (no authentication is required at the handshake level).
- Craft a malicious mount frame: Construct a
mount,live_redirect_mount, orurl_changeWebSocket frame (or an SSE mount request) with theviewfield 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. - 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. - 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
viewparameter values containing arbitrary dotted Python module paths. - Logs: Django/djust application logs showing
mountorlive_redirect_mountframes withviewvalues 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 취약점:
무료 취약성 평가
클라우드 보안 태세를 벤치마킹합니다
9개의 보안 도메인에서 클라우드 보안 관행을 평가하여 위험 수준을 벤치마킹하고 방어의 허점을 식별합니다.
추가 Wiz 리소스
맞춤형 데모 받기
맞춤형 데모 신청하기
"내가 본 최고의 사용자 경험은 클라우드 워크로드에 대한 완전한 가시성을 제공합니다."
"Wiz는 클라우드 환경에서 무슨 일이 일어나고 있는지 볼 수 있는 단일 창을 제공합니다."
"우리는 Wiz가 무언가를 중요한 것으로 식별하면 실제로 중요하다는 것을 알고 있습니다."