CVE-2025-10157 : contournement de l’analyse de sécurité dans picklescan conduisant à une exécution de code arbitraire

Picklescan est une bibliothèque de sécurité conçue pour analyser les fichiers pickle Python à la recherche de contenus malveillants. Les fichiers pickle sont une méthode courante pour sérialiser et désérialiser des structures d’objets Python, largement utilisée dans les pipelines de Machine Learning (ML) pour enregistrer et charger des modèles entraînés (par exemple, les modèles PyTorch). En raison du risque inhérent d’exécution de code arbitraire lors de la désérialisation, des outils comme picklescan sont utilisés pour garantir que seuls des fichiers pickle « sûrs » sont traités.

Cette vulnérabilité représente un contournement fondamental de la promesse de sécurité centrale de l’outil, créant un faux sentiment de sécurité. Toute application Python, en particulier les systèmes ML/IA, qui s’appuie sur une version vulnérable de picklescan pour assainir des fichiers non fiables est à haut risque. Un attaquant peut créer un fichier malveillant que l’outil approuvera comme sûr, conduisant à une exécution de code à distance (RCE) lorsque le fichier est utilisé par l’application en aval.

La vulnérabilité est considérée comme à haut risque car elle subvertit un contrôle de sécurité. Au moment de la rédaction, aucun exploit actif n’est connu en circulation, et la vulnérabilité n’est pas répertoriée dans le catalogue KEV (Known Exploited Vulnerabilities) de la CISA. Cependant, un proof-of-concept public existe, ce qui augmente la probabilité d’une exploitation future.

Produitpicklescan
Date2025-12-05 00:39:26

Résumé technique

La vulnérabilité est un contournement de l’analyse de sécurité enraciné dans un contrôle incomplet des modules dangereux au sein d’un fichier pickle. La cause profonde est identifiée comme CWE-184 : Liste noire incomplète. L’outil picklescan effectue la validation de sécurité en vérifiant si un fichier pickle tente d’importer et d’utiliser des modules présents dans une liste d’exclusion de modules notoirement dangereux (par exemple, os, subprocess, asyncio). Cependant, le contrôle utilise une correspondance exacte de la chaîne de caractères du nom du module.

Un attaquant peut éluder ce contrôle en faisant référence à un sous-module d’un module bloqué. Par exemple, si la liste d’exclusion contient asyncio, l’outil le bloquera, mais ne bloquera pas asyncio.unix_events, qui peut tout de même être utilisé pour exécuter des commandes arbitraires.

La chaîne d’attaque procède comme suit :

  1. Un attaquant crée un fichier pickle malveillant qui importe un sous-module d’un module connu et bloqué.
  2. Le fichier est envoyé à une application Python qui utilise picklescan pour la validation.
  3. picklescan analyse les modules requis par le pickle et les compare à la liste d’exclusion.
  4. Comme le sous-module (par exemple, asyncio.unix_events) ne correspond exactement à aucune entrée de la liste (par exemple, asyncio), l’analyse classe erronément le fichier comme sûr.
  5. L’application, faisant confiance au résultat de l’analyse, procède à la désérialisation du fichier en utilisant pickle.load() de Python ou une fonction équivalente.
  6. Le processus de désérialisation exécute le code spécifié dans le fichier pickle, provoquant une exécution arbitraire de code avec les privilèges de l’application Python.

Le défaut conceptuel peut être illustré comme suit :

# Logique conceptuellement vulnérable
# Une liste d'exclusion de modules dangereux.
DENYLIST = {"os", "subprocess", "asyncio"}

# Le contrôle échoue car "asyncio.unix_events" n'est pas présent dans l'ensemble.
def is_module_denied(module_name):
    return module_name in DENYLIST

# Logique correcte conceptuelle
# La correction inclut le contrôle du module de base en plus du chemin complet.
def is_module_denied_fixed(module_name):
    base_module = module_name.split('.')[0]
    return base_module in DENYLIST or module_name in DENYLIST

Les versions spécifiques vulnérables et corrigées de picklescan n’étaient pas disponibles au moment de la rédaction. Les utilisateurs doivent mettre à jour vers la version la plus récente disponible.

Recommandations

  • Appliquer le correctif immédiatement : mettre à jour picklescan vers la dernière version disponible qui inclut la correction pour le contournement via les sous-modules.
  • Atténuations : la défense principale consiste à ne jamais désérialiser des fichiers pickle provenant de sources non fiables, indépendamment de l’analyse de sécurité. Lorsque cela est possible, utilisez des formats de sérialisation de données plus sûrs comme JSON ou YAML (avec chargement sécurisé). Si l’utilisation de pickle est inévitable, assurez-vous que l’application qui traite les données est exécutée avec les privilèges minimaux possibles et est fortement isolée.
  • Activités de surveillance et de détection :
    • Examiner les journaux des applications à la recherche d’éventuelles erreurs de désérialisation ou de comportements anormaux liés au traitement des fichiers.
    • Surveiller les systèmes exécutant des applications Python pour détecter des processus enfants suspects. Un processus Python qui lance de manière inattendue des shells (sh, bash, powershell) ou des outils réseau (curl, wget, nc) est un indicateur fort de compromission.
    • Inspecter le trafic réseau pour détecter des connexions sortantes inattendues depuis les serveurs applicatifs qui gèrent le chargement des fichiers.

  • Réponse aux incidents : si une compromission est suspectée, isoler immédiatement l’hôte concerné du réseau. Conserver les journaux applicatifs, les fichiers chargés et une image mémoire du processus en cours d’exécution pour analyse forensique. Enquêter sur tout signe de mouvement latéral ou d’exfiltration de données provenant de l’hôte compromis.
  • Défense en profondeur : implémenter un filtrage rigoureux du trafic sortant pour bloquer les communications C2 non autorisées. Utiliser des solutions de contrôle applicatif pour empêcher l’interpréteur Python d’exécuter du code ou des commandes système non autorisés. Effectuer régulièrement des sauvegardes des données critiques, y compris les modèles ML, dans un emplacement sécurisé et hors ligne.

[Callforaction-THREAT-Footer]

Leave a Reply

Your email address will not be published. Required fields are marked *