flawopen.com/AI Security/litellm-mcp-preview-command-injection-cve-2026-42271
LiteLLM MCP कमांड इंजेक्शन: CVE-2026-42271
GTIG ने CVE-2026-42271 के शोषण की पुष्टि की: मान्य LiteLLM key से MCP preview के ज़रिए कमांड चलाए जा सकते थे। 1.83.7 या नए संस्करण पर अपडेट करें।[1], [6], [8]
एक कार्यशाला में लोग किसी औज़ार को जोड़ने से पहले आज़मा सकते हैं। परीक्षण काउंटर कार्यशाला की शक्तिशाली मशीन चालू कर सकता है, इसलिए उसे निर्देश केवल पर्यवेक्षक को देने चाहिए। कमजोर LiteLLM संस्करणों में स्वीकार किया गया कोई भी पहचान-पत्र उस काउंटर तक पहुँच सकता था। Starlette की एक अलग खामी उस पहरेदार को भी भ्रमित कर सकती थी जो दोबारा बनाए गए URL से पहुँच का निर्णय करता है। दोनों सीमाओं को अलग-अलग ठीक करना होगा। दूसरे काउंटर पर कोई आगंतुक पार्सल के पते पर तिरछी रेखा या प्रश्नचिह्न लिख सकता है। कर्मचारी पता दोबारा जोड़ते समय उस पाठ को चिपकाकर नई राह समझ लेता है, जबकि पार्सल मूल गलियारे से ही जाता है। Starlette में Host और path का अलग भ्रम इसी तरह होता है।[1], [3], [5]
इस पेज के मुख्य शब्द
Model Context Protocol (MCP)- ऐसा प्रोटोकॉल जिसके ज़रिए AI gateway जैसे अनुप्रयोग बाहरी tools और data sources से जुड़ते हैं। LiteLLM के preview endpoints किसी MCP server configuration को सहेजने से पहले जाँचते हैं।[1]
stdio transport- MCP कनेक्शन का वह तरीका जो स्थानीय child process शुरू करता है और standard input तथा output से संदेशों का आदान-प्रदान करता है। यह प्रक्रिया LiteLLM proxy host पर proxy सेवा के ऑपरेटिंग-सिस्टम अधिकारों से चलती है।[1], [2]
भूमिका-आधारित authorization- सर्वर पर की जाने वाली जाँच जो आवश्यक भूमिका वाली पहचान को ही कोई कार्रवाई करने देती है।
CVE-2026-42271में preview routes पर वह PROXY_ADMIN जाँच नहीं थी जो save operation में थी।[1], [2] CVE-2026-48710 (Starlette BadHost)- Starlette की अलग खामी: अमान्य Host header से request.url.path, routing में उपयोग किए गए path से अलग हो सकता था। Horizon3 ने बताया कि कुछ dependency संयोजनों में इससे LiteLLM की path-based authentication bypass हो सकती थी; यह
CVE-2026-42271का हिस्सा नहीं है।[3], [5], [4] MCP stdio command allowlist- Executable basename का वह समूह जिसे LiteLLM stdio transport के लिए स्वीकार करता है। Configuration validation के समय और पुराने records के लिए client बनाने से पहले इसे फिर जाँचा जाता है। यह sandbox नहीं है क्योंकि अनुमत runtimes दिए गए arguments को interpret कर सकते हैं।[8]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-78
- CISA KEV — जोड़ा गया 2026-06-08 — CVE-2026-42271
हमले का चरण-दर-चरण प्रवाह
LiteLLM संस्करण और endpoints की पहुँच जाँचें
Maintainer advisory के अनुसार LiteLLM >=1.74.2 और <1.83.7 प्रभावित हैं और valid proxy API key आवश्यक है; patch से पहले low-privilege internal-user key सहित कोई भी authenticated key holder preview routes तक पहुँच सकता था। GTIG CVE-2026-42271 को confirmed-exploitation सूची में रखता है; इस CVE की prerequisites के लिए maintainer advisory का authenticated threat model मानें।[1], [6]
कम अधिकार वाली key से admin preview कार्रवाई तक पहुँच
Endpoints stdio command, arguments और environment variables सहित पूरी MCP server configuration स्वीकार करते थे। सर्वर key को authenticate करता था, लेकिन PROXY_ADMIN भूमिका नहीं जाँचता था; इसलिए कोई भी authenticated key holder preview चला सकता था।[1]
Starlette की अलग खामी authentication सीमा कमज़ोर कर सकती है
Horizon3 ने बताया कि प्रभावित Starlette संस्करण मौजूद होने पर CVE-2026-48710 path-based authentication को Starlette द्वारा चुने गए route से अलग request.url.path दिखा सकती थी। शोधकर्ताओं ने प्रभावित deployments में API-key की आवश्यकता हटाने के लिए इसे CVE-2026-42271 के साथ जोड़ने की सूचना दी। इस chain का श्रेय शोधकर्ताओं को दें; दोनों CVE के कारण और patches अलग हैं।[5], [3], [4]
दोनों सीमाएँ ठीक करें और resolved packages जाँचें
LiteLLM 1.83.7 में preview routes ठीक किए गए: अब PROXY_ADMIN आवश्यक है और tools/list में explicit authentication है। Patch नई/अपडेट अनुरोधों पर command allowlist जाँचता है और पुराने configuration को रोकने के लिए _create_mcp_client में फिर जाँचता है। Allowlist sandbox नहीं है; अनुमत runtimes arguments को interpret कर सकते हैं। Starlette ने CVE-2026-48710 को अलग से 1.0.1 में ठीक किया; resolved package combination जाँचें और बताई गई chain का स्वतंत्र आकलन करें।[1], [8], [4], [7]
हालिया अभियान का संदर्भ (7 अक्टूबर 2026 की रिपोर्ट)
Black Lotus Labs ने बताया कि PoeLLM malware का एक sample संभवतः /mcp-rest/test/connection को निशाना बना रहा था; BleepingComputer ने भी अभियान में CVE-2026-42271 के शोषण के प्रयासों की सूचना दी। रिपोर्ट यह साबित नहीं करती कि हर संक्रमित host इसी CVE से भंग हुआ या हर LiteLLM लक्ष्य कमजोर था। इसे मौजूदा targeting का प्रमाण मानें, इस दोष से जुड़ी पीड़ित-संख्या नहीं।[9], [10]
मूल कारण विश्लेषण (Root Cause)
LiteLLM की खामी दोनों MCP preview routes पर role check न होने से बनी: कोई भी वैध proxy API key PROXY_ADMIN भूमिका के बिना उन्हें चला सकती थी। Connection preview ने caller द्वारा दी गई stdio configuration स्वीकार की और proxy process के अधिकारों से उसका command शुरू किया। Starlette की एक अलग खामी में malformed Host header के कारण request.url.path, Starlette द्वारा route किए गए path से अलग हो सकता था; Horizon3 ने बताया कि LiteLLM के साथ इस व्यवहार को जोड़ने पर path-आधारित API-key validation bypass हो सकती थी। ये अलग-अलग vulnerabilities हैं: LiteLLM के authorization और command-execution boundaries ठीक करें और Starlette को 1.0.1 या बाद के संस्करण पर अपडेट करें।[1], [8], [3], [4], [5]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
यह excerpt execution boundary पर LiteLLM के merged patch को दिखाता है: stdio client बनाने से पहले command का basename जाँचा जाता है, इसलिए पुराने database/config records भी guard से गुजरते हैं। Patch नई और updated server requests को भी validate करता है और दोनों preview endpoints को PROXY_ADMIN तक सीमित करता है; /test/tools/list में explicit user_api_key_auth dependency भी जोड़ी गई। Allowlist sandbox नहीं है: अनुमत runtimes अपने arguments को अब भी interpret कर सकते हैं। Preview को admin तक सीमित रखें और proxy को न्यूनतम privileges से चलाएँ।[1], [2], [8]
सोर्स अंश: LiteLLM stdio client validation अंश
# _create_mcp_client: stdio command guard जुड़ने से पहले का कोड।
if server.command and server.args is not None:
stdio_config = MCPStdioConfig(
command=server.command,
args=server.args,
env=resolved_env,
)
# _create_mcp_client: पुराने DB/config रिकॉर्ड को फिर से validate करें।
if server.command:
base_command = os.path.basename(server.command)
if base_command not in MCP_STDIO_ALLOWED_COMMANDS:
raise HTTPException(
status_code=403,
detail="MCP stdio command is not in the allowlist",
)
if server.command and server.args is not None:
stdio_config = MCPStdioConfig(
command=server.command,
args=server.args,
env=resolved_env,
)
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓LiteLLM proxy deployments की सूची बनाएँ और वास्तव में resolved version पता करें; प्रभावित releases को 1.83.7 या नए संस्करण पर upgrade करें।[1], [8]
- ✓Deployed lockfile या container image जाँचें और resolved FastAPI संस्करण के साथ संगत होने पर Starlette 1.0.1 या नया सुनिश्चित करें; बिना परीक्षण dependency override न करें।[3], [7]
- ✓LiteLLM upgrade होने तक maintainer advisory के अनुसार reverse proxy या API gateway पर POST /mcp-rest/test/connection और POST /mcp-rest/test/tools/list को block करें।[1]
- ✓पुष्टि करें कि दोनों routes user_api_key_auth माँगते हैं और MCP client बनाने से पहले PROXY_ADMIN के अलावा सभी भूमिकाओं को अस्वीकार करते हैं।[1], [8]
- ✓ऐसे tests जोड़ें जो साबित करें कि unauthenticated request और मान्य non-admin key किसी preview operation तक नहीं पहुँचते, जबकि अधिकृत admin समर्थित workflow चला सकता है।[8]
- ✓Starlette के लिए malformed Host handling जाँचें और सुनिश्चित करें कि access-control middleware canonical ASGI path या framework द्वारा validated URL उपयोग करे।[3], [4]
- ✓Proxy logs और child-process telemetry में MCP preview routes का असामान्य उपयोग देखें; host access संभव लगे तो proxy में रखे credentials rotate करें।[1], [8]
- ✓दोनों मुद्दों के रिकॉर्ड अलग रखें:
CVE-2026-42271LiteLLM command execution है;CVE-2026-48710Starlette Host parsing और path confusion है।[1], [3] - ✓हर environment में LITELLM_MCP_STDIO_EXTRA_COMMANDS की समीक्षा करें; custom entries executable trust boundary बढ़ाती हैं और argument handling को सुरक्षित नहीं बनातीं।[8]
स्रोत
- LiteLLM security advisory GHSA-v4p8-mg3p-g94g / CVE-2026-42271
- LiteLLM pull request #25343: MCP stdio endpoint authorization and command validation fix
- Starlette advisory GHSA-86qp-5c8j-p5mr / CVE-2026-48710
- Starlette commit 764dab0: ignore malformed Host when constructing request.url
- Horizon3: CVE-2026-42271 chained with CVE-2026-48710
- Google Threat Intelligence Group: Vulnerability Discovery and Exploitation Trends in the AI Era
- LiteLLM issue #28993: FastAPI constraint and Starlette CVE-2026-48710 dependency resolution report
- LiteLLM merged PR #25343 — command allowlist, execution guard, role checks, and tests
- Lumen Black Lotus Labs: खुले सेवाओं को निशाना बनाता PoeLLM malware
- BleepingComputer: उजागर AI सर्वरों पर PoeLLM हमले