Selon JFrog Security Research (blog JFrog), trois vulnérabilités zero-day critiques dans l’outil open source PickleScan, largement utilisé pour analyser les modèles PyTorch au format pickle, permettent de contourner sa détection et d’ouvrir la voie à des attaques de chaîne d’approvisionnement à grande échelle; elles ont été corrigées en version 0.0.31.

• Contexte: PyTorch s’appuie par défaut sur la sérialisation Python « pickle », capable d’exécuter du code arbitraire à la désérialisation. PickleScan, utilisé notamment par Hugging Face, analyse le bytecode pickle (avec liste noire d’imports/ops dangereux) et doit interpréter les fichiers exactement comme PyTorch. Tout écart crée une surface d’évasion.

• Vulnérabilités (CVSS 9.3 chacune):

  • CVE-2025-10155 — File Extension Bypass: renommer un pickle malveillant en extension liée à PyTorch (ex. .bin, .pt) fait échouer l’analyse spécifique PyTorch de PickleScan, qui ne détecte pas le contenu, alors que PyTorch charge correctement en se basant sur le contenu et non l’extension.
  • CVE-2025-10156 — CRC Bypass dans archives ZIP: l’injection d’erreurs CRC dans l’archive fait lever des exceptions à PickleScan (arrêt de l’analyse), alors que PyTorch peut toujours charger les modèles malgré des CRC invalides (option de build désactivant les vérifications), créant une divergence exploitable.
  • CVE-2025-10157 — Bypass des “unsafe globals” via sous-classes: l’usage de sous-classes/sous-modules de bibliothèques dangereuses (ex. asyncio) contourne la vérification stricte des noms de modules, déclassant le risque en « Suspicious » au lieu de « Dangerous », permettant potentiellement l’exécution de code arbitraire.

• Impact et écosystème: Ces failles, dans un outil sur lequel s’appuie une large communauté (dont Hugging Face), constituent un point de défaillance unique et exposent à des risques de supply chain si des modèles malveillants passent la porte de la plateforme. Elles illustrent aussi les divergences de parsing entre PickleScan et PyTorch comme vecteurs d’évasion.

• Correctifs et recommandations du billet: les mainteneurs ont corrigé les trois vulnérabilités dans PickleScan 0.0.31 (vulns signalées le 29 juin 2025; correctifs publiés le 2 sept. 2025). Le billet préconise d’adopter des défenses en couches (sandbox, dépôt proxy sécurisé JFrog Artifactory/Curation), de favoriser des formats sûrs (safetensors) et de retirer automatiquement les modèles dont l’analyse échoue.

• IOCs et TTPs:

  • IOCs: aucun indicateur technique (hash/IP) fourni; exemple de ressource mentionnée pour PoC: « https://huggingface.co/MustEr/gpt2-elite/resolve/main/pytorch_model.bin?download=true ».
  • TTPs: renommage d’extensions (.pkl -> .bin/.pt) pour évasion; corruption/annulation des CRC dans archives ZIP pour bloquer l’analyse; usage de sous-classes/sous-modules (ex. asyncio.unix_events._UnixSubprocessTransport._start) pour contourner la blacklist; diffusion de modèles malveillants via plateformes de partage; exécution à la désérialisation pickle.

Type d’article: publication de recherche/rapport de vulnérabilité visant à dévoiler les failles, démontrer des PoC et documenter les correctifs.

🧠 TTPs et IOCs détectés

TTP

renommage d’extensions (.pkl -> .bin/.pt) pour évasion; corruption/annulation des CRC dans archives ZIP pour bloquer l’analyse; usage de sous-classes/sous-modules (ex. asyncio.unix_events._UnixSubprocessTransport._start) pour contourner la blacklist; diffusion de modèles malveillants via plateformes de partage; exécution à la désérialisation pickle.

IOC

aucun indicateur technique (hash/IP) fourni; exemple de ressource mentionnée pour PoC: https://huggingface.co/MustEr/gpt2-elite/resolve/main/pytorch_model.bin?download=true


🔗 Source originale : https://jfrog.com/blog/unveiling-3-zero-day-vulnerabilities-in-picklescan/