1 min de lecture
Un fichier qui s’appelle littéralement “None.py”. C’est tout ce qu’il fallait glisser dans un dépôt de modèle Hugging Face pour faire exécuter du code arbitraire à quiconque chargeait ce modèle avec Diffusers, que la victime ait activé trust_remote_code ou non. C’est le genre de bug qu’on n’invente pas : une interpolation de chaîne Python un peu trop littérale.
Source : Zafran Security, relayé par The Hacker News. CVE-2026-44827, CVE-2026-44513 (CVSS 8.8) et CVE-2026-45804 (CVSS 7.5). Corrigé dans Diffusers 0.38.0.
Le garde-fou qui vérifiait le mauvais nom de fichier
DiffusionPipeline.from_pretrained() accepte un paramètre custom_pipeline, et construit ensuite le nom du fichier à charger avec une f-string : f"{custom_pipeline}.py". Si vous ne fournissez pas ce paramètre, Python fait ce que Python fait : custom_pipeline vaut None, et l’interpolation produit très exactement la chaîne "None.py".
Le contrôle censé bloquer l’exécution de code non vérifié, trust_remote_code, ne passait pas par le même chemin de vérification pour ce cas précis. Un dépôt qui contient un fichier nommé None.py s’exécute donc au chargement, trust_remote_code=False ou pas.
Note du PandaRedacteur : le bug le plus dangereux n’est jamais celui qu’on a cherché à exploiter. C’est celui que personne n’a pensé à tester parce que le nom de fichier ressemblait à une erreur, pas à une porte d’entrée.
Deux CVE se partagent cette famille de contournement (CVE-2026-44827 et CVE-2026-44513, CVSS 8.8 chacune). Une troisième, CVE-2026-45804, joue sur un autre registre : une race condition entre deux appels HTTP non atomiques (hf_hub_download puis snapshot_download), qui laisse le temps à un attaquant de substituer le contenu téléchargé après que le scan de sécurité l’a validé.
La version longue détaille la race condition CVE-2026-45804, le tableau d’impact complet, et mes recommandations de durcissement pour les pipelines ML qui chargent des modèles tiers en CI/CD : pinning par hash, sandboxing d’exécution, traitement d’un modèle Hugging Face comme un package npm inconnu.
Articles lies
Orkes Conductor : une RCE sans authentification, déjà exploitée, derrière un sandbox laissé grand ouvert
Analyse de CVE-2026-58138, une RCE pré-authentification dans Orkes Conductor (3.21.21 à 3.30.1) causée par des évaluateurs GraalVM sans sandbox, ex...
23/09/2026PaperCut : 395 organisations tombent en 11 jours face à un essaim d'agents IA
Analyse de la campagne PaperCut pilotée par un essaim d'agents IA (Codex, DeepSeek) : CVE-2026-81578/82078, 440 instances compromises dans 48 pays,...
22/09/2026GitSpawn : le .git/config du dépôt exécute du code dans votre agent, avant le prompt de confiance
Analyse de GitSpawn (Manifold Security) : comment un .git/config malveillant abuse de core.fsmonitor pour exécuter du code dans sept agents de coda...
15/09/2026OpenAI resserre ses garde-fous après Hugging Face, mais le bypass reste à portée de prompt
Analyse critique des mesures annoncées par OpenAI après la brèche Hugging Face et la révélation Black Hat 2026 de l'essaim d'agents Artifactory : p...
27/08/2026Cloner ce dépôt vous appartient : quand l'injection de prompt se cache dans un enregistrement DNS
Analyse de la technique documentée par 0DIN : injection de prompt indirecte via un enregistrement DNS TXT combinée à un piège RuntimeError, aboutis...
10/08/2026