CVE-2025-10157: Controllo Incompleto dei Global in picklescan Consente Bypass della Scansione di Sicurezza ed Esecuzione Arbitraria di Codice

Prodotto picklescan
Data 2025-12-04 12:36:15

picklescan è uno strumento di sicurezza open-source progettato per eseguire la scansione dei file pickle di Python alla ricerca di contenuti dannosi noti prima che vengano deserializzati. I file pickle sono un formato comune per la serializzazione e la memorizzazione di oggetti Python, utilizzato ampiamente nei flussi di lavoro Machine Learning (ML) e MLOps per salvare e trasferire modelli addestrati, come quelli della libreria PyTorch. A causa dei pericoli intrinseci del formato pickle, che può eseguire codice arbitrario durante il caricamento, strumenti come picklescan sono spesso implementati come controllo di sicurezza critico.

Questa vulnerabilità annulla completamente la funzione protettiva dello strumento, creando un pericoloso falso senso di sicurezza. Ogni organizzazione che utilizza picklescan per sanificare file non affidabili è ad alto rischio. Un exploit riuscito consente a un attaccante di ottenere l’esecuzione arbitraria di codice sul sistema che elabora il file, portando potenzialmente alla compromissione di dati sensibili, al furto di proprietà intellettuale come modelli ML proprietari, o a movimenti laterali nella rete. Sebbene non ci siano prove di sfruttamenti attivi noti, esiste un proof-of-concept pubblico, e l’attacco è banale da eseguire per un avversario esperto.

Riassunto tecnico

La vulnerabilità è un CWE-693: Fallimento del Meccanismo di Protezione ed è radicata nel controllo incompleto dello scanner sui moduli e global pericolosi all’interno di un file pickle. Il cuore della falla risiede nel metodo utilizzato per identificare moduli dannosi; lo scanner esegue un confronto esatto di stringhe con una lista di esclusione (denylist) di moduli di primo livello noti pericolosi (es. os, sys, asyncio).

Lo scanner non verifica ricorsivamente la presenza di sottomoduli potenzialmente pericolosi. Un attaccante può creare un file pickle che richiama una funzione proveniente da un sottomodulo di un modulo escluso, per esempio, asyncio.unix_events. Poiché picklescan controlla solo l’esatta stringa “asyncio”, l’importazione del suo sottomodulo passa inosservata e il file viene erroneamente contrassegnato come sicuro.

La catena di attacco è la seguente:

  1. Un attaccante crea un file pickle dannoso che esegue codice tramite un sottomodulo di un modulo di alto livello noto pericoloso.
  2. Il file viene sottoposto a un’applicazione o pipeline che utilizza la libreria vulnerabile picklescan per la sanificazione.
  3. picklescan analizza il file ma non rileva il sottomodulo dannoso nella sua lista di esclusione, segnalandolo come sicuro.
  4. L’applicazione affidandosi al risultato deserializza il file usando pickle.load().
  5. Durante la deserializzazione, l’interprete Python esegue il codice incorporato, compromettendo il sistema ospitante con i privilegi dell’applicazione in esecuzione.

Versioni affette: tutte le versioni di picklescan fino alla 0.0.30 inclusa sono vulnerabili. Una correzione non è ancora pubblicamente disponibile.

Una rappresentazione concettuale della logica errata:

# Logica Vulnerabile Concettuale in picklescan
# Il controllo fallisce perché "asyncio.unix_events" non è presente nell’insieme.
DANGEROUS_GLOBALS = {"os", "sys", "asyncio"}

def is_safe(module_name):
  if module_name in DANGEROUS_GLOBALS:
    return False # Non verifica la presenza di sottomoduli
  return True

Raccomandazioni

  • Patching Immediato: Una versione corretta non è ancora stata rilasciata. Monitorare il repository del progetto picklescan per aggiornamenti e aggiornare a una versione successiva alla 0.0.30 non appena disponibile.
  • Mitigazioni: La mitigazione primaria è aderire al principio fondamentale di sicurezza di non deserializzare mai file pickle provenienti da fonti non affidabili o non autenticate, indipendentemente dai risultati della scansione. Se la deserializzazione di file pickle esterni è necessaria per motivi di business, assicurarsi che essa avvenga in un ambiente fortemente isolato e sandboxato (es. un container minimale senza accesso alla rete e con permessi di sola lettura al filesystem).
  • Ricerca & Monitoraggio:
    • Inventariare tutte le applicazioni interne, le pipeline di build e gli ambienti MLOps per individuare eventuali utilizzi della libreria picklescan.
    • Verificare i codici sorgente per tutte le istanze di pickle.load() e pickle.loads() che elaborano file provenienti da fonti esterne. Trattare tutti i file precedentemente considerati sicuri da una versione vulnerabile di picklescan come potenzialmente dannosi.
    • Monitorare i sistemi che processano file pickle per comportamenti anomali, come processi figli inattesi, connessioni di rete in uscita o modifiche al filesystem locale.
  • Risposta agli Incidenti:
    • Se si sospetta una compromissione, isolare immediatamente l’host colpito dalla rete per prevenire l’espansione dell’impatto.
    • Conservare il file pickle malevolo, i log di sistema e un’immagine forense della macchina ai fini dell’indagine.
  • Difesa in Profondità:
    • Eseguire tutti i processi di elaborazione dei dati, specialmente quelli che richiedono deserializzazione, come utente a basso privilegio, per ridurre il raggio d’azione in caso di esecuzione di codice.
    • Implementare un filtraggio rigoroso del traffico in uscita sui server per bloccare eventuali canali di command-and-control (C2).
    • Valutare l’utilizzo di formati di serializzazione più sicuri come JSON per lo scambio di dati con fonti non affidabili.

Vuoi garantire la massima sicurezza informatica alla tua azienda? ISGroup SRL è qui per aiutarti con soluzioni di cyber security su misura per la tua azienda.

Vuoi che gestiamo tutto noi per te? Il servizi di Virtual CISO e di gestione delle vulnerabilità sono perfetti per la tua organizzazione.

Hai già le idee chiare su quello che ti serve? Esplora i nostri servizi di:

E molto altro. Proteggi la tua azienda con i migliori esperti di cybersecurity!