flawopen.com/AI Security/langgraph-js-graph-input-control-directive-october-2026
GHSA-wp87-994x-j95x: JSON को ग्राफ निर्देश समझने की त्रुटि
LangGraph.js <1.4.21 सामान्य JSON को control directive मान सकता था और validation या approval nodes छोड़ सकता था। अपडेट करें और server पर state जाँचें।[1]
ग्राफ को रेलवे स्टेशन समझें: सामान चढ़ने से पहले जाँचा जाता है। प्रभावित संस्करण में “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
हमले का चरण-दर-चरण प्रवाह
Application caller JSON लेती है
प्रभावित deployment validated state server पर बनाने के बजाय untrusted JSON सीधे graph को देती है।[1]
सामान्य processing छूट सकती है
Object को state update या routing instruction मानकर application-defined validation या approval nodes bypass हो सकते हैं।[1]
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";
}
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓@langchain/langgraph को 1.4.21 या बाद में upgrade करें; lockfile और deployed artifact में version जाँचें।[1], [2]
- ✓Request JSON सीधे
graph.invoke()याgraph.stream()को न दें; स्पष्ट allowlist से server पर graph state बनाएँ।[1] - ✓Control objects को caller-controlled state से अलग रखें; समान field names वाले parsed JSON को सामान्य input मानने का test जोड़ें।[2]
- ✓हर sensitive tool या side effect को authenticated identity और resource scope के आधार पर operation boundary पर authorize करें।[1]
- ✓एक integration test जोड़ें जो untrusted JSON को graph से गुज़ारे और पुष्टि करे कि लक्ष्य resource के लिए authenticated principal अधिकृत न हो तो sensitive tool का stub कभी call न हो।[1], [2]