深刻度: 高、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を通じて調整されました。