
Injection de code dans uproot <= 5.7.4 via une génération non sécurisée de code source Python à partir des métadonnées TStreamerInfo de ROOT.
Sévérité : Élevée, CVSS 4.0 8.5, CVSS 3.1 7.8 (attribuée par VulnCheck, l'ACN)
Vecteur (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
Vecteur (v3.1) : CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Versions affectées : uproot <= 5.7.4
Corrigé dans : 5.7.5 / commit c045c28
CWE : CWE-94 (contrôle inadéquat de la génération de code, injection de code) ; CWE-95 secondaire (injection Eval)
Signalé par : Sai Teja Erukude
CNA : VulnCheck
Publié : 18 juillet 2026
uproot et versions antérieures génèrent dynamiquement le code source de classes Python à partir des métadonnées de ROOT et le compilent à l'exécution.
5.7.4TStreamerInfoCertains champs de métadonnées de streamer contrôlés par le fichier sont interpolés dans le code source Python généré sans échappement sûr. Un attaquant capable de fournir un fichier ROOT spécialement conçu peut injecter dans les métadonnées de streamer un contenu qui brise les expressions Python, comme un nom d'élément spécialement conçu.
Lorsqu'une application affectée ouvre le fichier ROOT spécialement conçu et que uproot génère puis invoque la méthode de lecture correspondante, l'expression Python injectée peut s'exécuter dans le contexte du processus hôte.
Un attaquant peut exécuter du code Python arbitraire dans les applications qui ouvrent ou traitent des fichiers ROOT contrôlés par l'attaquant via les chemins de code affectés d'uproot.
Selon l'application, cela peut permettre :
Le problème se situe dans le chemin de génération de code source d'uproot pour les métadonnées de streamer de ROOT.
La preuve de concept crée un fichier ROOT contenant des métadonnées TStreamerInfo spécialement conçues pour une classe ExploitTarget. Le nom d'élément de streamer spécialement conçu sort de l'expression générée et injecte un appel pathlib bénin.
Le comportement observé est le suivant :
TStreamerInfo stockées dans le fichier.ExploitTarget.read_members générée exécute l'expression injectée.root_file_builder.py crée malicious_tstreamerinfo.root avec des métadonnées de streamer spécialement conçues.
run_poc.py ouvre le fichier avec uproot, force la génération de la classe ExploitTarget stockée dans le fichier, invoque la méthode read_members générée et vérifie la présence du fichier témoin.
À exécuter uniquement dans un environnement de test local :
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
Résultats attendus sur les versions vulnérables :
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 charge utile est volontairement inoffensive. Elle écrit uniquement cette chaîne témoin locale :
executed through uproot generated read_members
Elle ne lance pas de shell, ne se connecte pas à un service réseau, ne lit pas de secrets, ne supprime pas de données et ne modifie aucun fichier en dehors du répertoire de la preuve de concept.
Mettez à niveau vers uproot 5.7.5 ou une version ultérieure.
Si une mise à niveau immédiate n'est pas possible :
TStreamerInfo inattendues avant le traitement.| Date | Événement |
|---|---|
| 20 mai 2026 | Vulnérabilité soumise à VulnCheck |
| 20 mai 2026 | VulnCheck a initié la prise de contact ; CVE-2026-9147 provisoirement attribuée |
| 5 juillet 2026 | uproot 5.7.5 publié avec le correctif |
| 18 juillet 2026 | CVE-2026-9147 publiée |
Découverte et signalée par Sai Teja Erukude, coordonnée via VulnCheck.