flawopen.com/Teardowns/cve-2026-105697-langflow-mcp-stdio-command-injection
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]
ऐसे कर्मचारी की कल्पना करें जिसे ऐसा वाक्य मिलता है जिसमें विराम-चिह्न काम बदल सकता है: एक चिह्न डिलीवरी निर्देश को दूसरा आदेश बना सकता है। Langflow कॉन्फ़िगर किया गया कमांड ऐसे shell को देता था जो इस सिंटैक्स को नियंत्रण निर्देश मानता है, जबकि executable और arguments को अलग-अलग डेटा की तरह देना चाहिए। सुधार अनुमत कमांड की जाँच करके shell के बिना प्रोग्राम शुरू करता है।[1], [2]
इस पेज के मुख्य शब्द
MCP stdio परिवहन- MCP सर्वर को स्थानीय child process के रूप में शुरू करता है और standard input/output से संदेशों का आदान-प्रदान करता है।[1], [2]
कमांड इंजेक्शन (CWE-78)- बाहरी नियंत्रण वाला पाठ shell या process launcher को दिए जाने वाले ऑपरेटिंग सिस्टम कमांड को बदल देता है।[1], [5]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए 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]
हमले का चरण-दर-चरण प्रवाह
उपयोगकर्ता MCP कॉन्फ़िगरेशन मार्ग तक पहुँचता है
एडवाइज़री MCP server settings या MCP Tools component वाले flow के रास्ते का वर्णन करती है। नेटवर्क से उपलब्ध उस instance में जहाँ development default LANGFLOW_AUTO_LOGIN=true हो, attacker बिना credentials token पा सकता था। Auto-login बंद होने पर भी प्रमाणित non-admin उपयोगकर्ता पर्याप्त हो सकता है।[1]
कॉन्फ़िगरेशन प्रक्रिया तैयारी तक पहुँचता है
MCP stdio कनेक्शन तैयार करते समय कमांड और तर्क command_str बनते हैं।[1]
Shell स्ट्रिंग की व्याख्या करता है
1.10.3 से पहले लॉन्च मार्ग bash -c का उपयोग करता था; सफल MCP handshake से पहले कनेक्शन प्रयास पर कमांड चल जाती थी।[1]
प्रवेश-बिंदु जाँच अधूरी है
1.9.0 REST सेटिंग जाँचता है, लेकिन flow और tweak कॉन्फ़िगरेशन मॉडल की जाँच को पार कर सकते हैं।[1]
होस्ट प्रक्रिया Langflow की अनुमति से चलती है
कमांड Langflow सेवा उपयोगकर्ता के रूप में चलती है। UI फिर भी MCP सर्वर शुरू न होने की सूचना दे सकता है।[1]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
कमज़ोर अंश एडवाइज़री में बताए गए 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.
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓
langflowको 1.10.3+,langflow-baseको 0.10.3+ औरlfxको 1.10.3+ पर अपडेट करें; तैनात पैकेज संस्करण सत्यापित करें।[1], [3] - ✓1.9.0 की REST मॉडल जाँच को पूर्ण सुधार न मानें; पुराने संस्करणों में flow और tweak के भीतर मौजूद MCP कॉन्फ़िगरेशन की समीक्षा करें।[1]
- ✓हर प्रवेश मार्ग और प्रक्रिया निर्माण से ठीक पहले कमांड, तर्क, वातावरण, पैकेज स्रोत और पृथक्करण नीति जाँचें।[1], [2]
- ✓Process API को executable और argument vector अलग-अलग दें; shell कमांड स्ट्रिंग बनाना छोड़ें।[2]
- ✓Multi-tenant deployment में अनुमत
npx/uvxपैकेज निश्चित करें और दस्तावेज़ित interpreter तथा Docker hardening विकल्प सक्षम करें।[1] - ✓FlawOpen की incident response सिफारिश: प्रभावित अवधि में MCP stdio कनेक्शन कॉन्फ़िगर या चलाने की अनुमति रखने वालों की समीक्षा करें; host telemetry में अनपेक्षित Langflow child process खोजें।[1]
- ✓REST API, flow, tweak, पुराने component और pre-spawn मार्गों के परीक्षण जोड़ें; सुनिश्चित करें कि अस्वीकृत कॉन्फ़िगरेशन प्रक्रिया न बनाए।[2]