
uproot <= 5.7.4 inyección de código a través de la generación insegura de código fuente de Python a partir de los metadatos de TStreamerInfo de ROOT.
Gravedad: Alta, CVSS 4.0 8.5, CVSS 3.1 7.8 (asignada por VulnCheck, el 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
Afectado: uproot <= 5.7.4
Corregido en: 5.7.5 / commit c045c28
CWE: CWE-94 (Control inadecuado de la generación de código, inyección de código); CWE-95 secundaria (inyección de eval)
Descubierto y reportado por: Sai Teja Erukude
Publicado: 18 de julio de 2026
uproot 5.7.4 y versiones anteriores generan dinámicamente el código fuente de clases Python a partir de metadatos TStreamerInfo de ROOT y lo compilan en tiempo de ejecución.
Algunos campos de metadatos de streamer controlados por el archivo se interpolan en el código fuente Python generado sin un entrecomillado seguro. Un atacante que pueda proporcionar un archivo ROOT manipulado puede inyectar contenido que rompe expresiones Python en los metadatos del streamer, como un nombre de elemento manipulado.
Cuando una aplicación afectada abre el archivo ROOT manipulado y uproot genera e invoca el método lector correspondiente, la expresión Python inyectada puede ejecutarse en el contexto del proceso anfitrión.
Un atacante puede ejecutar código Python arbitrario en aplicaciones que abren o procesan archivos ROOT controlados por el atacante mediante rutas de código de uproot afectadas.
Dependiendo de la aplicación, esto puede permitir:
El problema está en la ruta de generación de código fuente de uproot para metadatos de streamer de ROOT.
La PoC crea un archivo ROOT que contiene metadatos TStreamerInfo manipulados para una clase ExploitTarget. El nombre del elemento de streamer manipulado escapa de la expresión generada e inyecta una llamada benigna a pathlib.
El comportamiento reportado es:
TStreamerInfo respaldados por el archivo.ExploitTarget.read_members generado ejecuta la expresión inyectada.root_file_builder.py crea malicious_tstreamerinfo.root con metadatos de streamer manipulados.
run_poc.py abre el archivo con uproot, fuerza la generación de la clase ExploitTarget respaldada por el archivo, invoca el método read_members generado y verifica la evidencia del archivo marcador.
Ejecutar únicamente en un entorno de prueba local:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
Evidencia esperada en versiones vulnerables:
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
La carga útil es intencionalmente inofensiva. Solo escribe esta cadena marcadora local:
executed through uproot generated read_members
No genera un shell, no se conecta a un servicio de red, no lee secretos, no elimina datos ni modifica archivos fuera del directorio del PoC.
Actualice a uproot 5.7.5 o posterior.
Si la actualización inmediata no es posible:
TStreamerInfo inesperados antes del procesamiento.| Fecha | Evento |
|---|---|
| 20 de mayo de 2026 | Vulnerabilidad enviada a VulnCheck |
| 20 de mayo de 2026 | VulnCheck inició el contacto; CVE-2026-9147 asignado provisionalmente |
| 5 de julio de 2026 | uproot 5.7.5 publicado con el parche |
| 18 de julio de 2026 | CVE-2026-9147 publicado |
Descubierto y reportado por Sai Teja Erukude.
La divulgación se coordinó a través de VulnCheck.