
uproot <= 5.7.4 Code-Injektion durch unsichere Generierung von Python-Quellcode aus ROOT-TStreamerInfo-Metadaten.
Schweregrad: Hoch, CVSS 4.0 8.5, CVSS 3.1 7.8 (vergeben von VulnCheck, der CNA)
Vektor (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
Vektor (v3.1): CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Betroffen: uproot <= 5.7.4
Behoben in: 5.7.5 / Commit c045c28
CWE: CWE-94 (Improper Control of Generation of Code, Code Injection); sekundär CWE-95 (Eval Injection)
Entdeckt und gemeldet von: Sai Teja Erukude
Veröffentlicht: 18. Juli 2026
uproot 5.7.4 und frühere Versionen generieren dynamisch Python-Klassenquellcode aus ROOT-TStreamerInfo-Metadaten und kompilieren diesen zur Laufzeit.
Einige dateigesteuerte Streamer-Metadatenfelder werden ohne sichere Quotierung in den generierten Python-Quellcode interpoliert. Ein Angreifer, der eine manipulierte ROOT-Datei bereitstellen kann, kann Inhalte, die Python-Ausdrücke aufbrechen, in Streamer-Metadaten einschleusen, etwa einen manipulierten Elementnamen.
Wenn eine betroffene Anwendung die manipulierte ROOT-Datei öffnet und uproot die entsprechende Reader-Methode generiert und aufruft, kann der eingeschleuste Python-Ausdruck im Kontext des hostenden Prozesses ausgeführt werden.
Ein Angreifer kann beliebigen Python-Code in Anwendungen ausführen, die vom Angreifer kontrollierte ROOT-Dateien über betroffene uproot-Codepfade öffnen oder verarbeiten.
Je nach Anwendung kann dies ermöglichen:
Das Problem liegt im Pfad zur Generierung von Quellcode für ROOT-Streamer-Metadaten in uproot.
Der PoC erstellt eine ROOT-Datei mit manipulierten TStreamerInfo-Metadaten für eine Klasse ExploitTarget. Der manipulierte Streamer-Elementname bricht aus dem generierten Ausdruck aus und schleust einen harmlosen pathlib-Aufruf ein.
Das gemeldete Verhalten ist:
TStreamerInfo-Metadaten.ExploitTarget.read_members führt den eingeschleusten Ausdruck aus.root_file_builder.py erstellt malicious_tstreamerinfo.root mit manipulierten Streamer-Metadaten.
run_poc.py öffnet die Datei mit uproot, erzwingt die Generierung der dateigestützten Klasse ExploitTarget, ruft die generierte Methode read_members auf und verifiziert den Nachweis über eine Marker-Datei.
Nur in einer lokalen Testumgebung ausführen:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
Erwartete Nachweise bei anfälligen Versionen:
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
Die Payload ist absichtlich harmlos. Sie schreibt lediglich diese lokale Marker-Zeichenkette:
executed through uproot generated read_members
Es startet keine Shell, verbindet sich mit keinem Netzwerkdienst, liest keine Secrets, löscht keine Daten und verändert keine Dateien außerhalb des PoC-Verzeichnisses.
Aktualisieren Sie auf uproot 5.7.5 oder höher.
Falls ein sofortiges Upgrade nicht möglich ist:
TStreamerInfo-Metadaten, bevor Sie sie verarbeiten.| Datum | Ereignis |
|---|---|
| 20. Mai 2026 | Schwachstelle bei VulnCheck eingereicht |
| 20. Mai 2026 | VulnCheck initiierte die Kontaktaufnahme; CVE-2026-9147 vorläufig zugewiesen |
| 5. Juli 2026 | uproot 5.7.5 mit Patch veröffentlicht |
| 18. Juli 2026 | CVE-2026-9147 veröffentlicht |
Entdeckt und gemeldet von Sai Teja Erukude.
Die Offenlegung wurde über VulnCheck koordiniert.