
ROOT TStreamerInfo 메타데이터로부터의 안전하지 않은 Python 소스 생성을 통한 uproot <= 5.7.4 코드 인젝션
심각도: 높음, CVSS 4.0 8.5, CVSS 3.1 7.8 (CNA인 VulnCheck가 배정)
벡터 (v4.0): CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
벡터 (v3.1): CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
영향: uproot <= 5.7.4
수정 버전: 5.7.5 / 커밋 c045c28
CWE: CWE-94 (코드 생성의 부적절한 제어, 코드 주입); 보조 CWE-95 (Eval 주입)
보고자: Sai Teja Erukude
CNA: VulnCheck
게시일: 2026년 7월 18일
uproot 5.7.4 및 이전 버전은 ROOT TStreamerInfo 메타데이터에서 Python 클래스 소스를 동적으로 생성하고 런타임에 컴파일합니다.
일부 파일 제어 스트리머 메타데이터 필드는 안전한 인용 없이 생성된 Python 소스에 삽입됩니다. 조작된 ROOT 파일을 제공할 수 있는 공격자는 조작된 요소 이름과 같은 Python 표현식을 깨뜨리는 콘텐츠를 스트리머 메타데이터에 주입할 수 있습니다.
영향을 받는 애플리케이션이 조작된 ROOT 파일을 열고 uproot가 해당 리더 메서드를 생성 및 호출하면, 주입된 Python 표현식이 호스팅 프로세스의 컨텍스트에서 실행될 수 있습니다.
공격자는 영향을 받는 uproot 코드 경로로 공격자가 제어하는 ROOT 파일을 열거나 처리하는 애플리케이션에서 임의의 Python 코드를 실행할 수 있습니다.
애플리케이션에 따라 다음이 가능할 수 있습니다:
문제는 ROOT 스트리머 메타데이터에 대한 uproot의 생성-소스 경로에 있습니다.
PoC는 ExploitTarget 클래스용으로 조작된 TStreamerInfo 메타데이터를 포함하는 ROOT 파일을 생성합니다. 조작된 스트리머 요소 이름은 생성된 표현식에서 벗어나 무해한 pathlib 호출을 주입합니다.
보고된 동작은 다음과 같습니다:
TStreamerInfo 메타데이터를 읽습니다.ExploitTarget에 대한 Python 클래스 소스를 생성합니다.read_members 메서드를 호출하면 주입된 표현식이 실행됩니다.root_file_builder.py는 조작된 스트리머 메타데이터로 malicious_tstreamerinfo.root를 생성합니다.
run_poc.py는 uproot로 파일을 열고, 파일 기반 ExploitTarget 클래스의 생성을 강제하고, 생성된 read_members 메서드를 호출하고, 마커 파일 증거를 검증합니다.
로컬 테스트 환경에서만 실행하십시오:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
취약한 버전에서 기대되는 증거:
uproot_version: 5.7.4
file_backed_element_name_contains_payload: True
class_code_contains_injected_pathlib_call: True
expected_exception: True
exception_type: DeserializationError
marker_exists: True
marker_contents:
executed through uproot generated read_members
success: True
페이로드는 의도적으로 무해합니다. 로컬 마커 문자열만 작성합니다:
executed through uproot generated read_members
셸을 생성하거나, 네트워크 서비스에 연결하거나, 비밀 정보를 읽거나, 데이터를 삭제하거나, PoC 디렉터리 밖의 파일을 수정하지 않습니다.
uproot 5.7.5 이상으로 업그레이드하십시오.
즉시 업그레이드가 불가능한 경우:
TStreamerInfo 메타데이터를 검증하거나 거부하십시오.| 날짜 | 이벤트 |
|---|---|
| 2026년 5월 20일 | VulnCheck에 취약점 제출 |
Sai Teja Erukude가 발견 및 보고했으며, VulnCheck를 통해 조정되었습니다.
| 2026년 5월 20일 | VulnCheck가 연락 시작; CVE-2026-9147 잠정 배정 |
| 2026년 7월 5일 | 패치가 포함된 uproot 5.7.5 릴리스 |
| 2026년 7월 18일 | CVE-2026-9147 게시 |