FlawOpen

flawopen.com/AI Security/litellm-mcp-preview-command-injection-cve-2026-42271

● CVE-2026-42271 · CVSS v4 8.7[1] · उच्च
सुरक्षा अनुसंधान · FlawOpen

LiteLLM MCP कमांड इंजेक्शन: CVE-2026-42271

GTIG ने CVE-2026-42271 के शोषण की पुष्टि की: मान्य LiteLLM key से MCP preview के ज़रिए कमांड चलाए जा सकते थे। 1.83.7 या नए संस्करण पर अपडेट करें।[1], [6], [8]

CVSS वेक्टर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[1]
💡 आसान भाषा में (ELI5)

एक कार्यशाला में लोग किसी औज़ार को जोड़ने से पहले आज़मा सकते हैं। परीक्षण काउंटर कार्यशाला की शक्तिशाली मशीन चालू कर सकता है, इसलिए उसे निर्देश केवल पर्यवेक्षक को देने चाहिए। कमजोर 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]

फ्रेमवर्क मैपिंग

हमले का चरण-दर-चरण प्रवाह

चरण 1

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]

चरण 2

कम अधिकार वाली key से admin preview कार्रवाई तक पहुँच

Endpoints stdio command, arguments और environment variables सहित पूरी MCP server configuration स्वीकार करते थे। सर्वर key को authenticate करता था, लेकिन PROXY_ADMIN भूमिका नहीं जाँचता था; इसलिए कोई भी authenticated key holder preview चला सकता था।[1]

चरण 3

Preview proxy host पर प्रक्रिया शुरू करता है

भेजी गई stdio configuration जाँचने के लिए LiteLLM MCP client बनाता और proxy सेवा के अधिकारों से कॉन्फ़िगर की गई child process शुरू करता था। यह gateway host पर command execution है, केवल AI model का असुरक्षित पाठ लौटाना नहीं।[2], [8]

चरण 4

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]

चरण 5

दोनों सीमाएँ ठीक करें और 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]

चरण 6

हालिया अभियान का संदर्भ (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,
    )

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत

← AI Security Directory →