
uproot <= 5.7.4: iniezione di codice tramite generazione non sicura di sorgenti Python dai metadati di ROOT TStreamerInfo.
Gravità: Alta, CVSS 4.0 8.5, CVSS 3.1 7.8 (assegnata da VulnCheck, il CNA)
Vector (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
Vector (v3.1): CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Versioni interessate: uproot <= 5.7.4
Corretta in: 5.7.5 / commit c045c28
CWE: CWE-94 (controllo improprio della generazione di codice, iniezione di codice); secondaria CWE-95 (iniezione tramite eval)
Segnalata da: Sai Teja Erukude
CNA: VulnCheck
Pubblicata: 18 luglio 2026
uproot 5.7.4 e versioni precedenti generano dinamicamente il sorgente di classi Python dai metadati ROOT TStreamerInfo e lo compilano a runtime.
Alcuni campi dei metadati streamer controllati dal file vengono interpolati nel sorgente Python generato senza un quoting sicuro. Un attaccante che può fornire un file ROOT appositamente costruito può iniettare contenuti in grado di rompere le espressioni Python nei metadati streamer, come ad esempio un nome di elemento modificato ad arte.
Quando un'applicazione vulnerabile apre il file ROOT appositamente costruito e uproot genera e invoca il corrispondente metodo di lettura, l'espressione Python iniettata può essere eseguita nel contesto del processo host.
Un attaccante può eseguire codice Python arbitrario nelle applicazioni che aprono o elaborano file ROOT controllati dall'attaccante usando i percorsi di codice uproot vulnerabili.
A seconda dell'applicazione, ciò può consentire di:
Il problema si trova nel percorso di generazione del sorgente di uproot per i metadati streamer ROOT.
La PoC crea un file ROOT contenente metadati TStreamerInfo appositamente costruiti per una classe ExploitTarget. Il nome dell'elemento streamer modificato esce dall'espressione generata e inietta una chiamata innocua a pathlib.
Il comportamento segnalato è:
TStreamerInfo provenienti dal file.ExploitTarget.read_members esegue l'espressione iniettata.root_file_builder.py crea malicious_tstreamerinfo.root con metadati streamer appositamente costruiti.
run_poc.py apre il file con uproot, forza la generazione della classe ExploitTarget basata sul file, invoca il metodo generato read_members e verifica l'evidenza tramite file marcatore.
Eseguire solo in un ambiente di test locale:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
Evidenza attesa sulle versioni vulnerabili:
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
Il payload è intenzionalmente innocuo. Scrive solo questa stringa marcatore locale:
executed through uproot generated read_members
Non avvia una shell, non si connette a servizi di rete, non legge segreti, non elimina dati e non modifica file al di fuori della directory della PoC.
Aggiornare a uproot 5.7.5 o successivo.
Se non è possibile aggiornare immediatamente:
TStreamerInfo inattesi prima dell'elaborazione.| Data | Evento |
|---|---|
| 20 maggio 2026 | Vulnerabilità inviata a VulnCheck |
| 20 maggio 2026 | VulnCheck ha avviato il contatto; CVE-2026-9147 assegnata provvisoriamente |
| 5 luglio 2026 | Pubblicata uproot 5.7.5 con patch |
| 18 luglio 2026 | CVE-2026-9147 pubblicata |
Scoperta e segnalata da Sai Teja Erukude, coordinata tramite VulnCheck.