FlawOpen

flawopen.com/Teardowns/cve-2026-105697-langflow-mcp-stdio-command-injection

● CVE-2026-105697 · CVSS 9.9[1] · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

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

Langflow 1.10.3 से पहले MCP stdio कॉन्फ़िगरेशन shell से शुरू होने वाली प्रक्रिया तक पहुँच सकता था। नेटवर्क से उपलब्ध ऐसी instance में जहाँ LANGFLOW_AUTO_LOGIN=true हो, attacker बिना credentials token पा सकता था; auto-login बंद होने पर भी प्रमाणित non-admin उपयोगकर्ता host पर commands चला सकता था। 1.10.3 हर रास्ते पर, process शुरू होने से ठीक पहले भी, validation करता है और shell के बिना program शुरू करता है।[1], [2], [3]

CVSS वेक्टरCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H[1]
💡 आसान भाषा में (ELI5)

ऐसे कर्मचारी की कल्पना करें जिसे ऐसा वाक्य मिलता है जिसमें विराम-चिह्न काम बदल सकता है: एक चिह्न डिलीवरी निर्देश को दूसरा आदेश बना सकता है। Langflow कॉन्फ़िगर किया गया कमांड ऐसे shell को देता था जो इस सिंटैक्स को नियंत्रण निर्देश मानता है, जबकि executable और arguments को अलग-अलग डेटा की तरह देना चाहिए। सुधार अनुमत कमांड की जाँच करके shell के बिना प्रोग्राम शुरू करता है।[1], [2]

इस पेज के मुख्य शब्द

MCP stdio परिवहन
MCP सर्वर को स्थानीय child process के रूप में शुरू करता है और standard input/output से संदेशों का आदान-प्रदान करता है।[1], [2]
कमांड इंजेक्शन (CWE-78)
बाहरी नियंत्रण वाला पाठ shell या process launcher को दिए जाने वाले ऑपरेटिंग सिस्टम कमांड को बदल देता है।[1], [5]
निष्पादन बिंदु
प्रक्रिया बनाने वाला अंतिम कोड मार्ग; API में पहले जाँच होने पर भी यहाँ सत्यापन आवश्यक है।[1], [2]
Flow/tweak में अंतर्निहित कॉन्फ़िगरेशन
सेटिंग API के बजाय flow या runtime override में रखी MCP सेटिंग।[1], [2]

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

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-78

मूल कारण विश्लेषण (Root Cause)

1.10.3 से पहले MCP stdio कॉन्फ़िगरेशन कमांड और तर्कों को एक स्ट्रिंग में जोड़कर bash -c से चलाता था। 1.9.0 में सेटिंग API को अनुमति-सूची तथा तर्क और पर्यावरण जाँच मिली, लेकिन flow या tweak में एम्बेड किए MCP Tools कॉन्फ़िगरेशन मॉडल की जाँच पार कर सकते थे, क्योंकि निष्पादन बिंदु पर साझा नीति लागू नहीं थी। Langflow 1.10.3 जाँच को lfx.base.mcp.security.validate_mcp_stdio_config में केंद्रीकृत करता है, API, flow, tweak, पुराने component और प्रक्रिया शुरू होने से ठीक पहले इसे लागू करता है, और shell wrapper हटाता है। CVE-2026-105697, CWE-78 है; CVSS 3.1 स्कोर 9.9 है। Auto-login बंद होने पर भी संबंधित MCP मार्ग कॉन्फ़िगर या चलाने में सक्षम प्रमाणित गैर-व्यवस्थापक उपयोगकर्ता आवश्यक है; डिफ़ॉल्ट auto-login खुले विकास इंस्टेंस को बिना क्रेडेंशियल पहुँच योग्य बना सकता है।[1], [2], [4], [5]

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

चरण 1

उपयोगकर्ता MCP कॉन्फ़िगरेशन मार्ग तक पहुँचता है

एडवाइज़री MCP server settings या MCP Tools component वाले flow के रास्ते का वर्णन करती है। नेटवर्क से उपलब्ध उस instance में जहाँ development default LANGFLOW_AUTO_LOGIN=true हो, attacker बिना credentials token पा सकता था। Auto-login बंद होने पर भी प्रमाणित non-admin उपयोगकर्ता पर्याप्त हो सकता है।[1]

चरण 2

कॉन्फ़िगरेशन प्रक्रिया तैयारी तक पहुँचता है

MCP stdio कनेक्शन तैयार करते समय कमांड और तर्क command_str बनते हैं।[1]

चरण 3

Shell स्ट्रिंग की व्याख्या करता है

1.10.3 से पहले लॉन्च मार्ग bash -c का उपयोग करता था; सफल MCP handshake से पहले कनेक्शन प्रयास पर कमांड चल जाती थी।[1]

चरण 4

प्रवेश-बिंदु जाँच अधूरी है

1.9.0 REST सेटिंग जाँचता है, लेकिन flow और tweak कॉन्फ़िगरेशन मॉडल की जाँच को पार कर सकते हैं।[1]

चरण 5

होस्ट प्रक्रिया Langflow की अनुमति से चलती है

कमांड Langflow सेवा उपयोगकर्ता के रूप में चलती है। UI फिर भी MCP सर्वर शुरू न होने की सूचना दे सकता है।[1]

चरण 6

1.10.3 निष्पादन सीमा बंद करता है

साझा नीति हर प्रवेश मार्ग और प्रक्रिया शुरू होने से ठीक पहले जाँचती है; प्रोग्राम shell के बिना शुरू होता है।[1], [2]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

कमज़ोर अंश एडवाइज़री में बताए गए shell-आधारित लॉन्च रूप को दिखाता है; यह चलने योग्य exploit नहीं है। सुधारा गया अंश 1.10.3 के डिज़ाइन का सार है: साझा नीति हर प्रवेश मार्ग और प्रक्रिया बनने से ठीक पहले कॉन्फ़िगरेशन जाँचती है, जबकि API executable और तर्क अलग-अलग देती है। सीधे लॉन्च से shell की व्याख्या हटती है, लेकिन इससे हर अनुमत executable या पैकेज अपने-आप सुरक्षित नहीं हो जाता; ऑपरेटरों को पैकेज स्रोत और पृथक्करण के उपयुक्त नियंत्रण भी लागू करने चाहिए।[1], [2]

सोर्स अंश: lfx/base/mcp/util.py — चुने हुए स्रोत कोड अंश

कमज़ोर कार्यान्वयन
# सलाह में दिया गया प्रभावित लॉन्च रूप (चयनित अंश):
server_params = StdioServerParameters(
    command="bash",
    args=["-c", f"exec {command_str}"],
    env=env_data,
)
सुरक्षित और सुदृढ़ फ़िक्स
# 1.10.3 स्रोत पर आधारित संक्षिप्त रूप: नीति जाँचें, फिर प्रक्रिया सीधे शुरू करें।
command_parts = shlex.split(command_str)
if not command_parts:
    raise ValueError("MCP stdio command is required")
command, args = command_parts[0], command_parts[1:]
validate_mcp_stdio_config(command, args, env_data)  # Repeat at the execution boundary.
server_params = StdioServerParameters(
    command=command,
    args=args,
    env=env_data,
)  # No shell wrapper. The shared validator rejects disallowed configurations.

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

स्रोत