
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
게시일: 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에 취약점 제출 |
| 2026년 5월 20일 | VulnCheck가 연락 개시; CVE-2026-9147 잠정 할당 |
| 2026년 7월 5일 | 패치가 포함된 uproot 5.7.5 릴리스 |
| 2026년 7월 18일 | CVE-2026-9147 공개 |
Sai Teja Erukude가 발견하고 보고했습니다.
공개는 VulnCheck를 통해 조정되었습니다.