严重性: 高危,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 类源代码,并在运行时编译。
某些由文件控制的 streamer 元数据字段在未进行安全转义的情况下被插入到生成的 Python 源代码中。能够提供特制 ROOT 文件的攻击者可以将可突破 Python 表达式的内容注入 streamer 元数据,例如精心构造的元素名称。
当受影响的应用程序打开特制的 ROOT 文件,且 uproot 生成并调用相应的读取方法时,被注入的 Python 表达式可在宿主进程上下文中执行。
攻击者可以在使用受影响 uproot 代码路径打开或处理攻击者控制的 ROOT 文件的应用程序中执行任意 Python 代码。
具体取决于应用程序,这可能允许:
问题出在 uproot 为 ROOT streamer 元数据生成源代码的路径中。
该 PoC 创建一个 ROOT 文件,其中包含针对 ExploitTarget 类的精心构造的 TStreamerInfo 元数据。精心构造的 streamer 元素名称逃逸出生成的表达式,并注入一个无害的 pathlib 调用。
已报告的行为如下:
TStreamerInfo 元数据。ExploitTarget 生成 Python 类源代码。read_members 方法会执行被注入的表达式。root_file_builder.py 创建包含精心构造的 streamer 元数据的 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
它不会启动 shell、连接网络服务、读取机密、删除数据,也不会修改 PoC 目录之外的文件。
升级到 uproot 5.7.5 或更高版本。
如果无法立即升级:
TStreamerInfo 元数据。| 日期 | 事件 |
|---|---|
| 2026 年 5 月 20 日 | 漏洞提交给 VulnCheck |
| 2026 年 5 月 20 日 | VulnCheck 启动外联流程; 临时分配 |
由 Sai Teja Erukude 发现并报告,并通过 VulnCheck 协调。
CVE-2026-9147| 2026 年 7 月 5 日 | 发布带补丁的 uproot 5.7.5 |
| 2026 年 7 月 18 日 | CVE-2026-9147 已发布 |