La CVE-2026-44827 permet à un attaquant d'exécuter du code arbitraire lors du chargement d'un modèle Hugging Face Diffusers, même si le flag trust_remote_code est désactivé. Les chercheurs ont nommé cette faille « FaceHugger » et l'ont attribuée à une condition de concurrence (race condition) dans le processus de chargement des modèles en deux phases de la bibliothèque. Tout pipeline qui récupère des modèles depuis le hub peut être affecté.
Pourquoi cette vulnérabilité est importante
Diffusers alimente les modèles text-to-image et d'autres modèles de diffusion. En juillet 2026, il a enregistré 8,1 millions de téléchargements, de sorte que d'innombrables tâches CI/CD, images de conteneurs et services d'inférence d'entreprise en dépendent. Le bug contourne le principal mécanisme de sécurité (trust_remote_code) que les développeurs activent pour bloquer le code Python non approuvé fourni avec un modèle.
Comment fonctionne le contournement
- Chargement en deux phases : Diffusers récupère d'abord une configuration de modèle, puis une seconde requête récupère les poids du modèle et tout code associé.
- Condition de concurrence : Le contrôle de sécurité qui inspecte la première requête ne s'étend pas à la seconde.
- Insertion de charge utile : Un attaquant qui contrôle la seconde requête injecte du code malveillant que la bibliothèque exécute ultérieurement, contournant ainsi entièrement la barrière de confiance.
Comme le contrôle ne porte que sur la requête initiale, la désactivation de trust_remote_code donne un faux sentiment de protection.
Mesures immédiates pour les développeurs
- Fixez la version de Diffusers dans votre fichier
requirements.txtou votre fichier lock pour empêcher les mises à jour accidentelles vers une version vulnérable. - Évitez les récupérations de modèles à la volée en production. Téléchargez les modèles vers un magasin d'artefacts de confiance (par exemple, un bucket S3 interne) et chargez-les à partir de là.
- Auditez les dépôts de modèles avant utilisation. Vérifiez que les fichiers de code du modèle correspondent aux empreintes (hashes) attendues ou proviennent d'une source vérifiée.
- Appliquez des contrôles de sortie réseau (egress) afin que les agents de build et les serveurs d'inférence ne puissent pas atteindre le hub public de Hugging Face, sauf si vous l'autorisez.
- Exécutez le chargement des modèles à l'intérieur de conteneurs isolés ou de bacs à sable (sandboxes) avec des privilèges minimaux, afin de limiter l'impact de l'exécution de code malveillant.
À retenir :
Le bug FaceHugger montre que désactiver trust_remote_code ne suffit pas. Tant que vous n'aurez pas mis à jour Diffusers et renforcé votre pipeline d'ingestion de modèles, chaque récupération de modèle à distance restera un point d'entrée potentiel pour du code malveillant.
