I ricercatori di JFrog hanno scoperto nel repository di Hugging Face modelli di machine learning malevoli la cui installazione può portare all'esecuzione di codice dell'attaccante per ottenere il controllo del sistema dell'utente. Il problema è causato dal fatto che alcuni formati di distribuzione dei modelli consentono l'inserimento di codice eseguibile; ad esempio, i modelli che utilizzano il formato "pickle" possono includere oggetti serializzati in Python e codice che viene eseguito durante il caricamento del file, mentre i modelli Tensorflow Keras possono eseguire codice tramite Lambda Layer.
Per prevenire la distribuzione di modelli malevoli nel repository di Hugging Face, viene effettuata una scansione per l'inserimento di codice serializzato, ma i modelli malevoli identificati dimostrano che i controlli esistenti possono essere aggirati. Inoltre, Hugging Face nella maggior parte dei casi etichetta i modelli come pericolosi senza bloccare il loro accesso. Sono stati identificati circa 100 modelli potenzialmente malevoli, il 95% dei quali destinati all'uso con il framework PyTorch e il 5% con Tensorflow. Le modifiche malevoli più comuni includono il furto di oggetti, la creazione di accessi remoti al sistema, l'avvio di applicazioni e la scrittura su file.

Si osserva che, in base alle azioni intraprese, la maggior parte dei modelli malevoli identificati è stata creata da ricercatori di sicurezza che tentano di ottenere ricompense per la scoperta di vulnerabilità e modalità di aggiramento della protezione di Hugging Face (ad esempio, invece di effettuare un attacco reale, tali modelli cercano di avviare una calcolatrice o inviare una richiesta di rete con informazioni sul successo dell'attacco). Tuttavia, ci sono anche esemplari che avviano un reverse shell per connettere l'attaccante al sistema.
Ad esempio, i modelli "baller423/goober2" e "star23/baller13" sono destinati ad attaccare sistemi che caricano il file del modello in PyTorch utilizzando la funzione torch.load(). Per attivare l'esecuzione del codice è utilizzato il metodo "__reduce__" dal modulo pickle, che consente di inserire codice Python arbitrario nel processo di deserializzazione eseguito durante il caricamento del modello.
Fonte: opennet.ru
