
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)
Vettore (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
Vettore (v3.1): CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Affetto: uproot <= 5.7.4
Corretto in: 5.7.5 / commit c045c28
CWE: CWE-94 (Improper Control of Generation of Code, Code Injection); CWE secondaria CWE-95 (Eval Injection)
Scoperto e segnalato da: Sai Teja Erukude
Pubblicato: 18 luglio 2026
uproot 5.7.4 e versioni precedenti generano dinamicamente il codice sorgente delle classi Python a partire dai metadati ROOT TStreamerInfo e lo compilano a runtime.
Alcuni campi dei metadati streamer controllati dal file vengono interpolati nel codice sorgente Python generato senza una corretta quotatura. Un attaccante in grado di fornire un file ROOT appositamente costruito può iniettare contenuto che interrompe le espressioni Python nei metadati streamer, ad esempio tramite un nome di elemento appositamente costruito.
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 ospitante.
Un attaccante può eseguire codice Python arbitrario nelle applicazioni che aprono o elaborano file ROOT controllati dall'attaccante tramite i percorsi di codice vulnerabili di uproot.
A seconda dell'applicazione, ciò può consentire di:
Il problema risiede nel percorso di generazione del codice sorgente di uproot per i metadati streamer ROOT.
Il PoC crea un file ROOT contenente metadati TStreamerInfo appositamente costruiti per una classe ExploitTarget. Il nome dell'elemento streamer appositamente costruito fuoriesce dall'espressione generata e inietta una chiamata pathlib innocua.
Il comportamento segnalato è il seguente:
TStreamerInfo memorizzati nel file.ExploitTarget.read_members generato 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 memorizzata nel file, invoca il metodo read_members generato e verifica la presenza del 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 genera una shell, non si connette a un servizio di rete, non legge segreti, non elimina dati e non modifica file al di fuori della directory del PoC.
Eseguire l'aggiornamento a uproot 5.7.5 o versione successiva.
Se l'aggiornamento immediato non è possibile:
TStreamerInfo imprevisti prima dell'elaborazione.| Data | Evento |
|---|---|
| 20 maggio 2026 | Vulnerabilità inviata a VulnCheck |
| 20 maggio 2026 | VulnCheck ha avviato il contatto; CVE-2026-9147 assegnato in via provvisoria |
| 5 luglio 2026 | uproot 5.7.5 rilasciato con la patch |
| 18 luglio 2026 | CVE-2026-9147 pubblicato |
Scoperta e segnalata da Sai Teja Erukude.
La divulgazione è stata coordinata tramite VulnCheck.