
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, la 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
Afectados: 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)
Reportado por: Sai Teja Erukude
CNA: VulnCheck
Publicado: 18 de julio de 2026
uproot y versiones anteriores generan dinámicamente código fuente de clases de Python a partir de los metadatos de ROOT y lo compilan en tiempo de ejecución.
5.7.4TStreamerInfoAlgunos campos de metadatos de streamer controlados por el archivo se interpolan en el código fuente de Python generado sin un escape seguro. Un atacante que pueda proporcionar un archivo ROOT manipulado puede inyectar contenido que rompe expresiones de 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 de lectura correspondiente, la expresión de 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 se encuentra en la ruta de código fuente generado de uproot para los metadatos de streamer de ROOT.
La PoC crea un archivo ROOT que contiene metadatos TStreamerInfo manipulados para una clase ExploitTarget. El nombre manipulado del elemento streamer 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 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 generado read_members y verifica la evidencia del archivo marcador.
Ejecutar únicamente en un entorno de pruebas 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 lanza un shell, no se conecta a un servicio de red, no lee secretos, no elimina datos ni modifica archivos fuera del directorio de la PoC.
Actualice a uproot 5.7.5 o posterior.
Si la actualización inmediata no es posible:
TStreamerInfo inesperados antes de procesarlos.| 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, coordinado a través de VulnCheck.