
CVE-2024-1561 – Gradio Beliebiger Dateizugriff
CVE-2024-1561 ist eine Schwachstelle für beliebigen Dateizugriff, die Gradio-Versionen vor 4.13.0 betrifft. Gradio ist ein beliebtes Python-Framework, das verwendet wird, um schnell Weboberflächen für Machine-Learning-Modelle und KI-Anwendungen zu erstellen.
Die Schwachstelle existiert, weil der Endpunkt /component_server nicht ordnungsgemäß einschränkt, welche Methoden der internen Component-Klasse aufgerufen werden können. Ein Angreifer kann dieses Verhalten ausnutzen, um Methoden aufzurufen, die nie über HTTP bereitgestellt werden sollten.
Eine dieser Methoden, move_resource_to_block_cache, ermöglicht es, eine Datei vom lokalen Dateisystem in das temporäre Cache-Verzeichnis von Gradio zu kopieren. Sobald die Datei kopiert wurde, wird sie über den Endpunkt /file zugänglich, sodass ein Angreifer ihren Inhalt abrufen kann.
Obwohl die Schwachstelle keine direkte Remote-Code-Ausführung ermöglicht, kann sie sensible Dateien vom Server offenlegen und genutzt werden, um Anmeldeinformationen, Konfigurationsdateien, API-Schlüssel, Token oder andere für weitere Angriffe nützliche Informationen zu sammeln.
Versionen 4.13.0 und höher enthalten die notwendigen Sicherheitsprüfungen, um die willkürliche Methodenaufrufe zu verhindern.
Das Problem rührt von unzureichender Validierung innerhalb des /component_server-Endpunkts her.
Anstatt Anfragen auf eine sichere Liste aufrufbarer Funktionen zu beschränken, erlaubte Gradio Angreifern, beliebige Methodennamen anzugeben, die zu einer Komponenteninstanz gehören.
Weil die interne Methode:
move_resource_to_block_cache()
einen Dateisystempfad als Eingabe akzeptiert, kann ein Angreifer die Anwendung anweisen, jede lesbare Datei auf dem Server zwischenzuspeichern.
Sobald die Datei zwischengespeichert ist, wird sie über die normale Dateibereitstellungsfunktion von Gradio offengelegt.
Ein erfolgreicher Angriff folgt in der Regel diesen Schritten:
/config-Endpunkt abfragen./component_server senden.move_resource_to_block_cache aufrufen./etc/passwd)./file-Endpunkt herunterladen.Dieser Prozess ermöglicht es, beliebige Dateien, die vom Gradio-Prozess lesbar sind, remote abzurufen.
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"
}
Bei Erfolg gibt Gradio den Speicherort der zwischengespeicherten Datei zurück.
Der Angreifer kann dann anfordern:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
um den Inhalt abzurufen.
Eine erfolgreiche Ausnutzung kann es einem Angreifer ermöglichen, sensible Dateien zu lesen, darunter:
/etc/passwd.env)Die Auswirkungen hängen von den Berechtigungen der Gradio-Anwendung ab.
Um diese Schwachstelle zu beheben:
Dieses Repository wird nur für Bildungszwecke, Sicherheitsforschung und autorisierte Penetrationstests bereitgestellt. Holen Sie stets die ausdrückliche Genehmigung ein, bevor Sie Systeme testen, die Sie nicht besitzen oder für die Sie keine Berechtigung zur Überprüfung haben.