Guide
Sécurité d'un modèle téléchargé : safetensors et pickle
Pourquoi un fichier pickle peut exécuter du code, ce que garantit safetensors, le risque de trust_remote_code et les vérifications de provenance.
Mis à jour le
Un fichier de modèle n'est pas toujours une simple suite de nombres. Au format pickle, le format par défaut des poids PyTorch (souvent .bin ou .pt), charger le fichier peut exécuter du code arbitraire. Le format safetensors a été conçu pour stocker les poids sans ce risque. Les trois règles de base : préférer les fichiers .safetensors, télécharger depuis le compte de l'éditeur, et ne jamais activer le chargement de code distant sans l'avoir lu et figé sur une version.
Pourquoi pickle est dangereux
La documentation de Hugging Face sur l'analyse des fichiers pickle l'explique ainsi : un fichier pickle est une pile d'instructions qui sont exécutées au chargement. Certaines instructions permettent d'importer un module et d'appeler une fonction ; un fichier piégé peut donc appeler des fonctions Python comme eval ou exec et exécuter n'importe quel programme. D'où la consigne reprise dans la plupart des documentations : ne pas charger de fichier pickle venant d'une source non fiable.
Ce que fait safetensors
Safetensors est, selon sa documentation, un format simple pour stocker des tenseurs (les tableaux de nombres qui forment les poids) « de façon sûre (par opposition à pickle) » et rapide. La bibliothèque Transformers charge en priorité les fichiers safetensors quand ils existent, et sa documentation rappelle que pickle est « connu pour ne pas être sûr ». Safetensors est utilisé par de nombreux projets, dont Transformers, Diffusers, llama.cpp ou ComfyUI d'après la liste publiée.
En pratique, dans l'onglet des fichiers d'un dépôt, cherchez les fichiers model.safetensors ou model-00001-of-0000N.safetensors. Si un dépôt ne propose que des fichiers pickle, posez-vous la question avant de les charger.
Le code distant : trust_remote_code
Certains modèles utilisent un code d'architecture qui n'est pas dans Transformers. Pour les charger, il faut passer l'option trust_remote_code=True, qui exécute le code Python présent dans le dépôt. La documentation de Transformers demande une « précaution supplémentaire » : malgré l'analyse antivirus du Hub, il faut éviter d'exécuter par inadvertance du code malveillant. Elle recommande, comme couche de sécurité supplémentaire, de charger une révision précise (un identifiant de commit), pour éviter qu'un code modifié depuis votre vérification soit chargé.
Ce que le Hub vérifie, et ce qu'il ne vérifie pas
| Vérification | Ce qu'elle apporte | Sa limite |
|---|---|---|
| Antivirus ClamAV sur chaque fichier envoyé | Détecte des fichiers dangereux connus | Ne couvre pas les attaques par pickle, selon la documentation |
| Analyse des imports des fichiers pickle | Affiche la liste des imports à côté du fichier et signale les suspects | « Pas infaillible à 100 % » : la vérification reste à la charge de l'utilisateur |
| Signature des commits par clé GPG | Garantit qui a envoyé le fichier | Ne garantit pas que le fichier est sain |
| Accès contrôlé (gated) | L'éditeur sait qui télécharge | Ne dit rien de la sûreté du fichier |
Au-delà du fichier : la provenance
La note d'analyse de la CNIL sur l'open source en IA relève d'autres risques propres aux modèles diffusés librement : des contributions malveillantes qui chercheraient à empoisonner les modèles ou à y introduire des portes dérobées, et la facilité à supprimer ou contourner les filtres de sécurité d'un modèle par paramétrage ou ajustement. Un modèle republié par un tiers, même au format safetensors, peut avoir été modifié de cette façon. Pour les attaques par les données d'entraînement, voyez la page empoisonnement des données de Cercle IA Tech · Sécurité.
La liste de contrôle avant de charger un modèle
- Le compte : le dépôt appartient-il à l'éditeur (par exemple
mistralai/,Qwen/,google/) ou à un tiers qui le republie ? - Le format : des fichiers
.safetensorssont-ils disponibles ? Sinon, quels imports le Hub affiche-t-il pour les fichiers pickle ? - Le code : le chargement demande-t-il
trust_remote_code=True? Si oui, lisez le code et figez la révision. - La version : notez l'identifiant de commit téléchargé, pour savoir exactement ce qui tourne chez vous.
- L'environnement : chargez d'abord le modèle dans un environnement isolé, sans accès à vos données ni à vos secrets.
- Le comportement : testez les garde-fous du modèle sur vos cas sensibles avant toute mise en service.
Pour choisir le modèle lui-même, voir lire une fiche de modèle.
Questions fréquentes
Un fichier .bin ou .pt peut-il contenir un programme malveillant ?
Oui s'il est au format pickle, le format par défaut des poids PyTorch. La documentation de Hugging Face explique que charger un fichier pickle peut exécuter du code arbitraire.
Le format safetensors est-il sûr ?
Hugging Face le présente comme un format simple pour stocker des tenseurs « de façon sûre », par opposition à pickle, tout en restant rapide. Il réduit le risque lié au fichier de poids, mais ne remplace pas la vérification de la provenance ni celle du code associé.
Sources
Pages consultées pour écrire cet article :