~4 minutes
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
OpenAI 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/2026CosmosEscape : un compte Azure Cosmos DB standard suffisait pour prendre toutes les bases de la plateforme
Analyse de CosmosEscape : la vulnérabilité découverte par Wiz Research dans le moteur Gremlin d'Azure Cosmos DB, qui permettait via la réflexion .N...
05/08/2026AWS Kiro : quand une page web piégée réécrit la config de confiance de votre IDE agentique
Analyse de CVE-2026-10591 : une faille de prompt injection indirecte dans AWS Kiro permet à une page web malveillante de réécrire mcp.json et d'obt...
02/08/2026Réponse à incident agentique, épisode 2 : quand l'attaquant est votre propre agent d'évaluation
Suite de l'article Réponse à incident à l'ère de l'Agentic AI : analyse du rebondissement OpenAI/Hugging Face (l'attaquant était un agent d'évaluat...
27/07/2026