
CVE-2024-1561 - Gradio Lettura arbitraria di file
CVE-2024-1561 è una vulnerabilità di lettura arbitraria di file che interessa Gradio versioni precedenti alla 4.13.0. Gradio è un popolare framework Python utilizzato per creare rapidamente interfacce web per modelli di machine learning e applicazioni di intelligenza artificiale.
La vulnerabilità esiste perché l'endpoint /component_server non limita correttamente quali metodi della classe interna Component possono essere invocati. Un attaccante può abusare di questo comportamento per chiamare metodi che non erano mai stati pensati per essere esposti tramite HTTP.
Uno di questi metodi, move_resource_to_block_cache, consente di copiare un file dal filesystem locale nella directory cache temporanea di Gradio. Una volta copiato, il file diventa accessibile tramite l'endpoint /file, permettendo a un attaccante di recuperarne il contenuto.
Sebbene la vulnerabilità non fornisca direttamente l'esecuzione di codice remoto, può esporre file sensibili dal server e può essere sfruttata per raccogliere credenziali, file di configurazione, chiavi API, token o altre informazioni utili per ulteriori attacchi.
Le versioni 4.13.0 e successive contengono i controlli di sicurezza necessari per prevenire l'invocazione arbitraria di metodi.
Il problema deriva da una validazione insufficiente all'interno dell'endpoint /component_server.
Invece di limitare le richieste a un elenco sicuro di funzioni chiamabili, Gradio permetteva agli attaccanti di specificare nomi di metodi arbitrari appartenenti a un'istanza del componente.
Poiché il metodo interno:
move_resource_to_block_cache()
accetta un percorso del filesystem come input, un attaccante può istruire l'applicazione a mettere in cache qualsiasi file leggibile sul server.
Una volta memorizzato nella cache, il file viene esposto tramite la normale funzionalità di servizio file di Gradio.
Un attacco con successo segue generalmente questi passaggi:
/config./component_server.move_resource_to_block_cache./etc/passwd)./file.Questo processo consente di recuperare in remoto file arbitrari leggibili dal processo Gradio.
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
Se l'operazione riesce, Gradio restituisce la posizione del file memorizzato nella cache.
L'attaccante può quindi richiedere:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
per recuperarne il contenuto.
Uno sfruttamento con successo può permettere a un attaccante di leggere file sensibili tra cui:
/etc/passwd.env)L'impatto dipende dai privilegi con cui è eseguita l'applicazione Gradio.
Per correggere questa vulnerabilità:
Questo repository è fornito esclusivamente a scopo educativo, per la ricerca sulla sicurezza e per test di penetrazione autorizzati. Ottenere sempre il permesso esplicito prima di testare sistemi che non si possiedono o per i quali non si è autorizzati a eseguire valutazioni.