CVE-2025-10156 : contournement de sécurité dans picklescan via un CRC invalide menant à l’exécution de code arbitraire

picklescan est un outil de sécurité conçu pour détecter les fichiers pickle Python malveillants, couramment utilisés pour sérialiser et désérialiser des structures d’objets Python. Il est souvent utilisé dans les applications côté serveur, en particulier dans les pipelines de Machine Learning Operations (MLOps), pour analyser les fichiers téléchargés par les utilisateurs, tels que les modèles d’intelligence artificielle (par exemple, les modèles PyTorch), à la recherche de menaces intégrées avant qu’ils ne soient traités.

L’impact de cette vulnérabilité est critique, car elle permet à un attaquant distant non authentifié d’obtenir une exécution de code arbitraire, entraînant une compromission complète du système. La vulnérabilité découle d’un défaut de conception de type « fail-open » (échec ouvert), où le scanner s’interrompt en présence d’une erreur spécifique, conduisant l’application parente à traiter par erreur le fichier malveillant comme sûr.

Cette vulnérabilité représente une menace significative pour toute infrastructure qui s’appuie sur picklescan pour valider des archives ZIP non fiables. Étant donné qu’un exploit public est disponible et que la complexité de l’attaque est faible, les systèmes exposés sur Internet utilisant cette bibliothèque présentent un risque élevé d’exploitation active. Le problème principal ne réside pas dans l’analyse du pickle lui-même, mais dans la gestion préliminaire du format conteneur du fichier (ZIP).

Produitpicklescan
Date04/12/2025 12:46:36

Résumé technique

La cause principale de cette vulnérabilité est une gestion inappropriée des conditions exceptionnelles au sein du module d’analyse des archives ZIP de picklescan. Le scanner ne gère pas correctement les erreurs qui surviennent lorsqu’il rencontre un fichier à l’intérieur d’une archive ZIP avec un code CRC (Cyclic Redundancy Check) invalide.

La chaîne d’attaque se déroule comme suit :

  1. Un attaquant crée un fichier pickle malveillant conçu pour exécuter du code arbitraire lors de la désérialisation.
  2. L’attaquant intègre ce fichier dans une archive ZIP, en corrompant intentionnellement la valeur CRC associée au fichier malveillant dans les métadonnées du ZIP.
  3. Lorsque picklescan tente d’extraire et d’analyser le contenu de l’archive ZIP téléchargée, il rencontre le fichier avec un CRC invalide.
  4. Cette rencontre génère une exception non gérée qui provoque l’arrêt prématuré du processus picklescan.
  5. L’application appelante interprète par erreur cette analyse interrompue comme un succès (condition « fail-open »), supposant qu’aucun contenu malveillant n’a été détecté.
  6. Le fichier validé — mais en réalité malveillant — est ensuite transmis à un composant de l’application qui utilise pickle.load() ou une fonction similaire. Cela déclenche la désérialisation du pickle malveillant, avec une exécution de code arbitraire sous les permissions du processus applicatif.

Une représentation conceptuelle de la logique défectueuse :

# Défaut conceptuel
try:
    # Cette fonction s'arrête sur une erreur CRC
    picklescan.scan_zip_archive("malicious_archive.zip")
except Exception as e:
    # Le scanner plante, mais l'exception n'est pas gérée
    # correctement, ou le flux logique se poursuit comme si l'analyse avait réussi.
    log("Le scanner a échoué, mais nous continuons quand même.")

# Le fichier malveillant est maintenant traité par une autre partie de l'application
process_unscanned_file("malicious_archive.zip")

La vulnérabilité affecte toutes les versions de picklescan antérieures à la version corrigée. Les utilisateurs doivent consulter l’avis officiel du fournisseur pour des informations spécifiques sur la version. Une exploitation réussie permet à l’attaquant d’obtenir le contrôle total du serveur affecté.

Recommandations

  • Appliquer le correctif immédiatement : mettre à jour picklescan vers la dernière version fournie par le développeur, qui résout cette condition « fail-open ». Consultez le dépôt officiel du projet ou les avis de sécurité pour connaître les numéros de version corrects.

  • Implémenter une logique « fail-closed » : en tant que mesure d’atténuation critique, assurez-vous que toute application intégrant picklescan (ou tout autre scanner de sécurité) fonctionne selon un principe « fail-closed » (échec fermé). Si le processus d’analyse renvoie une erreur ou s’interrompt de manière inattendue, le fichier analysé doit être rejeté et mis en quarantaine. Ne permettez pas la poursuite du traitement.

  • Threat hunting et surveillance :

    • Surveillez les journaux de l’application à la recherche d’exceptions ou d’erreurs liées au traitement des fichiers ZIP, en particulier les erreurs CRC ou d’intégrité des données provenant de la bibliothèque picklescan.
    • Recherchez dans les journaux des preuves que le processus picklescan s’est terminé de manière inattendue ou n’a pas terminé une analyse. Corrélez ces événements avec les activités de téléchargement de fichiers.
    • Créez des alertes pour les modèles où un téléchargement de fichier est suivi d’un plantage du scanner et d’un traitement immédiat du même fichier.

  • Réponse aux incidents :

    • En cas de suspicion de compromission, isolez immédiatement l’hôte affecté du réseau pour éviter les mouvements latéraux.
    • Conservez le fichier ZIP suspect et tous les journaux pertinents de l’application et du système pour une analyse forensique. Ne tentez pas d’ouvrir ou d’analyser le fichier sur une machine de production ou personnelle.
    • Partez du principe d’une compromission complète du système et lancez le plan de réponse aux incidents prévu par l’organisation afin d’identifier l’étendue de la brèche et d’éradiquer la menace.

  • Défense en profondeur :

    • Exécutez les applications qui traitent des fichiers non fiables dans des environnements sandbox ou conteneurisés, avec des contrôles stricts sur les ressources et l’accès réseau, afin de limiter les dommages potentiels d’une exécution de code réussie.
    • Appliquez le principe du moindre privilège. Assurez-vous que le compte de service exécutant l’application ne dispose que des permissions minimales nécessaires à sa fonction.

[Callforaction-THREAT-Footer]

Leave a Reply

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