FlawOpen

flawopen.com/AI Security/langgraph-js-graph-input-control-directive-october-2026

● CWE-20 · CVSS v4 7.6[1] · उच्च
सुरक्षा अनुसंधान · FlawOpen

GHSA-wp87-994x-j95x: JSON को ग्राफ निर्देश समझने की त्रुटि

LangGraph.js <1.4.21 सामान्य JSON को control directive मान सकता था और validation या approval nodes छोड़ सकता था। अपडेट करें और server पर state जाँचें।[1]

CVSS वेक्टरCVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N[1]
💡 आसान भाषा में (ELI5)

ग्राफ को रेलवे स्टेशन समझें: सामान चढ़ने से पहले जाँचा जाता है। प्रभावित संस्करण में “Command” लिखा टैग, पटरियाँ बदलने के अधिकृत आदेश जैसा समझा जा सकता था। सुधार सामान्य objects और Command objects को अलग करता है, फिर भी हर संवेदनशील कार्रवाई से पहले अनुमति जाँचनी चाहिए।[1], [2]

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

GHSA-wp87-994x-j95x
LangChain की 8 अक्टूबर 2026 की High-severity advisory; CVSS 4.0 7.6, CWE-20 और कोई ज्ञात CVE नहीं।[1]
Graph input
LangGraph.js invocation को दिया जाने वाला state object; server को इसे जाँचकर अनुमत fields चुनने चाहिए।[1]
Command
State बदलने या execution निर्देशित करने वाला LangGraph.js object; सामान्य JSON data ही रहना चाहिए।[2]
Control boundary
वह सीमा जहाँ application data को nodes चुनने या state बदलने वाले निर्देश समझा जाता है।[1]

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

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

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

चरण 1

Application caller JSON लेती है

प्रभावित deployment validated state server पर बनाने के बजाय untrusted JSON सीधे graph को देती है।[1]

चरण 2

Data object को control समझा जाता है

1.4.21 से पहले lg_name marker अकेले plain object को Command जैसा बना सकता था। दोष type recognition में है, JSON parsing में नहीं।[1], [2]

चरण 3

सामान्य processing छूट सकती है

Object को state update या routing instruction मानकर application-defined validation या approval nodes bypass हो सकते हैं।[1]

चरण 4

Tool permissions प्रभाव बढ़ाती हैं

Sensitive tools होने पर attacker application permissions से उन्हें चला सकता है। हर operation boundary पर authorization दोबारा करें।[1]

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

Advisory @langchain/langgraph >=0.2.23 और <1.4.21 को प्रभावित करती है। Application को untrusted JSON सीधे graph को देना और validation या authorization के लिए सामान्य execution path पर निर्भर होना चाहिए। Upstream PR के अनुसार, isCommand पहले केवल lg_name field देखकर value पहचानता था; इसलिए सामान्य JSON object को Command समझा जा सकता था। Graph तब application के validation या approval nodes से पहले update या goto लागू कर सकता था। Sensitive tools होने पर attacker application permissions से अनधिकृत execution करा सकता है। Version 1.4.21 सामान्य objects को Command मानने से रोकता है और वास्तविक instances स्वीकार करता है। यह server-side state निर्माण, allowlisted fields और हर संवेदनशील operation पर authorization की जगह नहीं लेता। Advisory CWE-20, High, CVSS 4.0 7.6 बताती है; ज्ञात CVE नहीं है।[1], [2]

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

यह संक्षिप्त TypeScript उदाहरण PR #2966 का बदलाव दिखाता है: केवल lg_name field किसी plain object को Command नहीं बनाती। यह शब्दशः source code या पूर्ण implementation नहीं है। सुधार के बाद parsed JSON सामान्य state path पर जाता है और वास्तविक Command objects graph control करते हैं। Object shape को authorization न मानें। Server पर allowlist से state बनाएँ और हर sensitive operation को अलग authorize करें।[2]

सोर्स अंश: LangGraph.js Command पहचान का संक्षिप्त व्यवहार उदाहरण; पूर्ण स्रोत कोड नहीं

कमज़ोर कार्यान्वयन
type CommandLike = { lg_name: string; goto?: unknown; update?: unknown };

function isCommand(value: unknown): value is CommandLike {
  return typeof value === "object" && value !== null &&
    "lg_name" in value && value.lg_name === "Command";
}
सुरक्षित और सुदृढ़ फ़िक्स
type CommandLike = { lg_name: string; goto?: unknown; update?: unknown };

function isPlainObject(value: object): boolean {
  const prototype = Object.getPrototypeOf(value);
  return prototype === Object.prototype || prototype === null;
}

function isCommand(value: unknown): value is CommandLike {
  return typeof value === "object" && value !== null &&
    !isPlainObject(value) &&
    "lg_name" in value && value.lg_name === "Command";
}

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

स्रोत

← AI Security Directory →