I ricercatori di sicurezza informatica hanno redatto un rapporto dettagliato su una vulnerabilità di sicurezza ora risolta che colpisce la piattaforma di infrastruttura di intelligenza artificiale (AI) open-source Ollama, che potrebbe essere sfruttata per ottenere l’esecuzione di codice da remoto.
Tracciata come CVE-2024-37032, la vulnerabilità è stata denominata Probllama dalla società di sicurezza cloud Wiz. Dopo una divulgazione responsabile il 5 maggio 2024, il problema è stato risolto nella versione 0.1.34, che è stata rilasciata il 7 maggio 2024.
La falla critica sull’intelligenza artificiale su Ollama
Ollama è un servizio per il packaging, la distribuzione e l’esecuzione di modelli linguistici di grandi dimensioni (LLM) localmente su dispositivi Windows, Linux e macOS.
Alla base del problema c’è un caso di convalida insufficiente degli input che si traduce in una vulnerabilità di traversal del percorso che un attaccante potrebbe sfruttare per sovrascrivere file arbitrari sul server e portare infine all’esecuzione di codice da remoto.
La vulnerabilità richiede che il criminale informatico (o comunque un gruppo di hacker) invii richieste HTTP appositamente create al server API di Ollama per un exploit riuscito; va ricordato che il protocollo HTTP non è più sicuro come un tempo (ora lo standard è HTTPS).
In particolare, sfrutta l’endpoint API “/api/pull” (che viene utilizzato per scaricare un modello dal registro ufficiale o da un repository privato) per fornire un file manifesto del modello dannoso che contiene un payload di traversal del percorso nel campo digest.
Questo problema potrebbe essere abusato non solo per corrompere file arbitrari sul sistema, ma anche per ottenere l’esecuzione di codice da remoto sovrascrivendo un file di configurazione (“etc/ld.so.preload”) associato al linker dinamico (che è noto come “ld.so”) per includere una libreria condivisa dannosa e avviarla ogni volta prima di eseguire qualsiasi programma.
I rischi presenti sull’intelligenza artificiale di Ollama che erano presenti secondo i ricercatori
Mentre il rischio di esecuzione di codice da remoto è notevolmente ridotto nelle installazioni Linux predefinite, poiché il server API si collega a localhost, non è lo stesso per le installazioni Docker, dove il server API è esposto pubblicamente.
“Questo problema è estremamente grave nelle installazioni Docker, poiché il server viene eseguito con privilegi di root e ascolta su 0.0.0.0 per impostazione predefinita, il ché consente lo sfruttamento remoto di questa vulnerabilità,” ha detto il ricercatore di sicurezza Sagi Tzadik.
A complicare ulteriormente le cose è la mancanza intrinseca di autenticazione associata a Ollama, permettendo così a un attaccante di sfruttare un server accessibile pubblicamente per rubare o manomettere i modelli di AI e compromettere i server di inferenza AI self-hosted.
Questo richiede anche che tali servizi siano protetti utilizzando middleware come proxy inversi con autenticazione; Wiz ha dichiarato di aver identificato oltre 1.000 istanze di Ollama esposte che ospitano numerosi modelli di AI senza alcuna protezione.
“CVE-2024-37032 è una vulnerabilità di esecuzione di codice da remoto facile da sfruttare che colpisce l’infrastruttura AI moderna“, ha detto Tzadik. “Nonostante il codice sia relativamente nuovo e scritto in linguaggi di programmazione moderni, vulnerabilità classiche come il Path Traversal rimangono un problema.”
Un lieto fine
Lo sviluppo arriva mentre la società di sicurezza AI Protect AI ha avvertito di oltre 60 falle sulla sicurezza che colpiscono vari strumenti open-source di AI/ML, inclusi problemi critici che potrebbero portare alla divulgazione di informazioni, accesso a risorse riservate, escalation dei privilegi e completo controllo del sistema.
La più grave di queste vulnerabilità è CVE-2024-22476 (punteggio CVSS 10.0), una vulnerabilità di iniezione SQL nel software Intel Neural Compressor che potrebbe consentire agli attaccanti di scaricare file arbitrari dal sistema host; fortunatamente ogni tipo di problematica legata ad Ollama è stata risolta nella versione 2.5.0.