Définition du produit : Picklescan est un outil de sécurité conçu pour analyser les fichiers Python pickle à la recherche de code malveillant avant qu’ils ne soient désérialisés. Il est largement utilisé dans les environnements de Machine Learning (ML) et MLOps pour atténuer le risque d’exécution de code à distance (RCE) lors du chargement de modèles ou de données provenant de sources non fiables. Sa fonction principale est d’agir comme une barrière de sécurité au sein de la chaîne d’approvisionnement ML.
Profil de risque : Cette vulnérabilité permet de contourner complètement les fonctionnalités d’analyse de l’outil, entraînant un risque élevé d’exécution de code à distance non authentifiée. Un attaquant peut créer un fichier malveillant qu’une version vulnérable de Picklescan classera à tort comme sûr. Toute application en aval qui se fie à ce résultat et charge le fichier sera compromise. La vulnérabilité compromet la principale garantie de sécurité de l’outil.
Threat Intelligence : Un exploit de type preuve de concept (PoC) est disponible publiquement. Cependant, à l’heure actuelle, aucun cas d’exploitation active de cette vulnérabilité n’est connu. Elle ne figure pas dans le catalogue des vulnérabilités exploitées connues (KEV) de la CISA.
Surface d’exposition : Les organisations sont exposées si elles utilisent des versions de Picklescan jusqu’à la 0.0.30 incluse dans des flux de travail automatisés, tels que des pipelines CI/CD pour la validation de modèles ou des plateformes publiques d’ingestion de modèles. Les développeurs individuels et les data scientists qui s’appuient sur l’outil pour vérifier des modèles tiers sont également exposés.
| Produit | picklescan |
| Date | 2025-12-04 12:14:50 |
Résumé technique
Analyse de la cause profonde : La vulnérabilité est un problème de CWE-20 : Validation inappropriée de l’entrée dans la logique d’analyse des fichiers. Picklescan modifie le niveau de sévérité de l’analyse en fonction de l’extension du fichier. Lorsqu’il rencontre un fichier avec une extension associée à PyTorch (ex. .pt, .pth), il n’effectue pas d’inspection approfondie à la recherche d’opcodes pickle dangereux. Cela permet à une charge utile (payload) pickle malveillante standard, qui serait normalement détectée, d’éluder complètement l’analyse si elle est encapsulée dans un fichier avec l’une de ces extensions.
Chaîne d’attaque étape par étape :
- Création de la charge utile : Un attaquant crée une charge utile malveillante en utilisant des techniques standard de sérialisation pickle de Python. Cela implique généralement l’utilisation de la méthode
__reduce__pour appeler une fonction dangereuse, telle queos.systemousubprocess.run. - Évasion : L’attaquant enregistre le fichier pickle malveillant avec une extension associée à PyTorch, par exemple
malicious_model.pt. - Contournement de l’analyse : La version vulnérable de Picklescan est invoquée pour analyser
malicious_model.pt. En raison de la logique de validation inappropriée liée à l’extension.pt, l’outil n’identifie pas les opcodes dangereux et signale le fichier comme sûr. - Exécution : Une application ou un développeur en aval, faisant confiance au résultat de l’analyse, charge le fichier en utilisant une fonction standard comme
pickle.load(). Le processus de désérialisation exécute la charge utile intégrée, déclenchant l’exécution de code à distance sur le système hôte avec les privilèges de l’application.
Logique conceptuelle du code :
L’exemple suivant illustre le modèle dangereux, mais ne constitue pas un exploit direct. La vulnérabilité réside dans le fait que Picklescan ne parvient pas à détecter de telles structures dans les fichiers .pt.
# Exemple conceptuel d'un objet Pickle malveillant
# Un attaquant insère cette structure dans un fichier .pt pour contourner le scanner.
# Ce code est uniquement à des fins d'illustration.
import os
class Exploit:
def __reduce__(self):
# Cette fonction est appelée automatiquement lors de la désérialisation.
# Un attaquant insérerait une commande à exécuter sur le système cible.
cmd = ("echo 'Code execution achieved' > /tmp/pwned")
return (os.system, (cmd,))
# Lorsqu'un programme appelle pickle.load() sur un fichier contenant cet objet sérialisé,
# os.system(cmd) est exécuté.
Versions concernées :
- Vulnérables : Versions de Picklescan jusqu’à la 0.0.30 incluse
- Corrigées : Le correctif est disponible à partir de la version 0.0.31 de Picklescan
Recommandations
- Mise à jour immédiate : Mettre à jour l’outil
mmaitre314/picklescanvers la version 0.0.31 ou ultérieure pour appliquer le correctif de sécurité. - Atténuations :
- S’il n’est pas possible d’appliquer le correctif immédiatement, reconfigurer les flux de sécurité pour refuser tous les fichiers avec l’extension
.ptou.pth, ou les traiter comme intrinsèquement non sécurisés, quel que soit le résultat de l’analyse. - Passer à des formats de sérialisation de modèles plus sûrs, qui n’impliquent pas de risques d’exécution, comme
safetensors.
- S’il n’est pas possible d’appliquer le correctif immédiatement, reconfigurer les flux de sécurité pour refuser tous les fichiers avec l’extension
- Chasse et surveillance :
- Analyser rétroactivement tous les fichiers
.ptet.pthexistants dans les dépôts de modèles en utilisant la version mise à jour de Picklescan, afin de détecter les modèles malveillants précédemment non identifiés. - Surveiller les journaux des applications qui désérialisent des fichiers de modèles. Rechercher les processus enfants anormaux lancés (ex.
sh,bash,curl,powershell) par le processus de l’application. - Examiner les journaux réseau pour détecter des connexions sortantes suspectes provenant des hôtes chargés du chargement et de l’inférence des modèles.
- Analyser rétroactivement tous les fichiers
- Réponse aux incidents :
- En cas de suspicion de compromission, isoler immédiatement l’hôte concerné du réseau pour empêcher les mouvements latéraux.
- Conserver le fichier modèle suspect et les journaux applicatifs/système pertinents pour l’analyse forensique.
- Présumer que toutes les informations d’identification, clés et données sensibles accessibles depuis l’hôte compromis ont été exfiltrées et lancer les procédures de rotation et d’invalidation.
- Défense en profondeur :
- Effectuer le chargement des modèles et le traitement des données dans des environnements sandbox ou conteneurisés avec des privilèges minimaux et sans accès au réseau.
- Mettre en œuvre une segmentation réseau rigoureuse pour garantir que, même en cas de RCE, le rayon d’action de l’attaquant soit contenu.
[Callforaction-THREAT-Footer]
Leave a Reply