Definizione del prodotto: Picklescan è uno strumento di sicurezza progettato per analizzare i file Python pickle alla ricerca di codice malevolo prima che vengano deserializzati. È ampiamente utilizzato in ambienti di Machine Learning (ML) e MLOps per mitigare il rischio di Esecuzione di Codice Remota (RCE) durante il caricamento di modelli o dati da fonti non attendibili. La sua funzione principale è quella di fungere da barriera di sicurezza all’interno della catena di approvvigionamento ML.
Profilo di rischio: Questa vulnerabilità consente di bypassare completamente le funzionalità di scansione dello strumento, comportando un rischio elevato di Esecuzione di Codice Remota non autenticata. Un attaccante può creare un file malevolo che una versione vulnerabile di Picklescan classificherà erroneamente come sicuro. Qualsiasi applicazione a valle che si fidi di questo risultato e carichi il file verrà compromessa. La vulnerabilità compromette la principale garanzia di sicurezza dello strumento.
Threat Intelligence: È disponibile un exploit proof-of-concept pubblico. Tuttavia, al momento non si conoscono casi di sfruttamento attivo di questa vulnerabilità. Non è presente nel catalogo delle Vulnerabilità Note Sfruttate (KEV) di CISA.
Superficie di esposizione: Le organizzazioni sono a rischio se utilizzano versioni di Picklescan fino alla 0.0.30 inclusa nei flussi di lavoro automatizzati, come pipeline CI/CD per la validazione dei modelli o piattaforme pubbliche di ingestion di modelli. Anche sviluppatori individuali e data scientist che si affidano allo strumento per verificare modelli di terze parti sono esposti.
| picklescan |
| 2025-12-04 12:14:50 |
Riassunto tecnico
Analisi della causa principale: La vulnerabilità è un problema di CWE-20: Validazione Impropria dell’Input nella logica di analisi dei file. Picklescan modifica il livello di severità della scansione basandosi sull’estensione del file. Quando incontra un file con estensione associata a PyTorch (es. .pt, .pth), non esegue un’ispezione approfondita alla ricerca di opcode pickle pericolosi. Questo permette a un payload pickle malevolo standard, che normalmente verrebbe rilevato, di eludere completamente l’analisi se incapsulato in un file con una di queste estensioni.
Catena di attacco passo-passo:
- Creazione del payload: Un attaccante crea un payload malevolo utilizzando tecniche standard di serializzazione pickle di Python. Questo comporta tipicamente l’utilizzo del metodo
__reduce__per chiamare una funzione pericolosa, comeos.systemosubprocess.run. - Evasione: L’attaccante salva il file pickle malevolo con un’estensione associata a PyTorch, ad esempio
malicious_model.pt. - Bypass della scansione: La versione vulnerabile di Picklescan viene invocata per analizzare
malicious_model.pt. A causa della logica di validazione impropria legata all’estensione.pt, lo strumento non identifica gli opcode pericolosi e segnala il file come sicuro. - Esecuzione: Un’applicazione o sviluppatore a valle, fidandosi del risultato della scansione, carica il file utilizzando una funzione standard come
pickle.load(). Il processo di deserializzazione esegue il payload incorporato, attivando l’Esecuzione di Codice Remota sul sistema ospite con i privilegi dell’applicazione.
Logica concettuale del codice:
L’esempio seguente illustra il pattern pericoloso, ma non è un exploit diretto. La vulnerabilità risiede nel fatto che Picklescan non riesce a rilevare tali strutture nei file .pt.
# Esempio concettuale di un oggetto Pickle Malevolo
# Un attaccante inserisce questa struttura in un file .pt per bypassare lo scanner.
# Questo codice è solo a scopo illustrativo.
import os
class Exploit:
def __reduce__(self):
# Questa funzione viene chiamata automaticamente durante la deserializzazione.
# Un attaccante inserirebbe un comando da eseguire sul sistema target.
cmd = ("echo 'Code execution achieved' > /tmp/pwned")
return (os.system, (cmd,))
# Quando un programma chiama pickle.load() su un file contenente questo oggetto serializzato,
# viene eseguito os.system(cmd).
Versioni interessate:
- Vulnerabili: Picklescan versioni fino alla 0.0.30 inclusa
- Corrette: La correzione è disponibile a partire dalla versione 0.0.31 di Picklescan
Raccomandazioni
- Aggiornamento immediato: Aggiornare lo strumento
mmaitre314/picklescanalla versione 0.0.31 o successiva per applicare la correzione di sicurezza. - Mitigazioni:
- Se non è possibile applicare subito la patch, riconfigurare i flussi di sicurezza per rifiutare tutti i file con estensione
.pto.pth, oppure trattarli come intrinsecamente non sicuri a prescindere dal risultato della scansione. - Passare a formati di serializzazione dei modelli più sicuri, che non comportino rischi di esecuzione, come
safetensors.
- Se non è possibile applicare subito la patch, riconfigurare i flussi di sicurezza per rifiutare tutti i file con estensione
- Caccia e monitoraggio:
- Scansionare retroattivamente tutti i file
.pte.pthesistenti nei repository di modelli utilizzando la versione aggiornata di Picklescan, per individuare modelli malevoli precedentemente non rilevati. - Monitorare i log delle applicazioni che deserializzano file di modelli. Cercare processi figli anomali lanciati (es.
sh,bash,curl,powershell) dal processo dell’applicazione. - Rivedere i log di rete per connessioni in uscita sospette provenienti dagli host che si occupano del caricamento e dell’inferenza dei modelli.
- Scansionare retroattivamente tutti i file
- Risposta a incidenti:
- Se si sospetta una compromissione, isolare immediatamente l’host interessato dalla rete per impedire movimenti laterali.
- Conservare il file modello sospetto e i log applicativi/di sistema pertinenti per analisi forense.
- Presumere che tutte le credenziali, chiavi e dati sensibili accessibili dall’host compromesso siano stati esfiltrati e avviare le procedure di rotazione e invalidazione.
- Difesa in profondità:
- Eseguire il caricamento dei modelli e l’elaborazione dei dati in ambienti sandbox o containerizzati con privilegi minimi e senza accesso alla rete.
- Implementare una segmentazione di rete rigorosa per garantire che anche in caso di RCE il raggio d’azione dell’attaccante sia contenuto.