flawopen.com/Teardowns/cve-2026-97662-aws-security-agent-mcp-git-argument-injection
CVE-2026-97662: AWS सिक्योरिटी एजेंट MCP में Git आर्ग्युमेंट इंजेक्शन
CVE-2026-97662 में AWS Security Agent MCP diff scan का caller-नियंत्रित Git ref कमांड विकल्प के रूप में समझा जा सकता था। इससे workspace सीमा पार करके host पर फ़ाइलें लिखी जा सकती थीं। संस्करण 0.2.0 या नया इंस्टॉल करें।[1], [2]
CVSS वेक्टर
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:Nकिसी कर्मचारी को लेबल से फ़ोल्डर ढूँढ़ने को कहा जाता है, लेकिन वह ऐसा लेबल स्वीकार कर लेता है जो नियंत्रण निर्देश से शुरू होता है। फाइलिंग सिस्टम फ़ोल्डर खोजने के बजाय निर्देश चला देता है। यहाँ, डैश से शुरू होने वाला Git ref विकल्प माना जा सकता था। Git चलाने से पहले खाली या विकल्प-जैसे ref को अस्वीकार करना इस इनपुट सीमा को बंद करता है। यह Git द्वारा विकल्पों की व्याख्या है, मनमाने shell commands का निष्पादन नहीं।[2]
इस पेज के मुख्य शब्द
MCP सर्वर- Model Context Protocol के ज़रिए AI ऐप को टूल देने वाली स्थानीय प्रक्रिया। टूल आर्ग्युमेंट सर्वर में अविश्वसनीय डेटा के रूप में आते हैं।
आर्ग्युमेंट इंजेक्शन (CWE-88)- कमांड-लाइन प्रोग्राम अविश्वसनीय इनपुट को विकल्प या delimiter मान लेता है, भले ही प्रक्रिया को shell string के बजाय आर्ग्युमेंट सूची दी गई हो।[2], [4]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-88
- OWASP GenAI 2025 — LLM01:2025 प्रॉम्प्ट इंजेक्शन
मूल कारण विश्लेषण (Root Cause)
AWS diff scan ऑपरेशन में संदर्भ-निर्भर आर्ग्युमेंट इंजेक्शन बताता है: स्कैन को दिया गया ref Git revision के बजाय कमांड-लाइन विकल्प माना जा सकता था। Upstream PR पुष्टि करता है कि start_diff_scan ने base_ref को git diff <base_ref> -- और git archive में भेजा; खाली या डैश से शुरू मान का अर्थ बदल सकता था। यह shell metacharacter injection नहीं है: आर्ग्युमेंट सूची shell parsing रोकती है, लेकिन बुलाया गया प्रोग्राम अपने विकल्प फिर भी पढ़ता है। AWS के अनुसार, इससे अपेक्षित workspace के बाहर फ़ाइलें बनाई, बदली या truncate की जा सकती थीं, प्रक्रिया की OS अनुमतियों की सीमा तक। मर्ज किया गया fix Git से पहले base_ref जाँचता है और खाली मान तथा trim करने के बाद - से शुरू मान अस्वीकार करता है; परीक्षण पुष्टि करते हैं कि अस्वीकृत इनपुट पर subprocess या upload नहीं होता। >=0.1.1 और <0.2.0 प्रभावित हैं; 0.2.0 में सुधार है। CVE रिकॉर्ड CVSS 4.0 6.9 Medium देता है; GitHub Advisory CVSS 3.1 8.2 High भी बताता है। यहाँ exploit payload नहीं दिया गया है।[1], [2], [3], [4]
हमले का चरण-दर-चरण प्रवाह
Agent diff scan टूल चलाता है
स्थानीय MCP सर्वर को caller-प्रभावित base_ref मिलता है। जोखिम तब है जब workflow किसी अविश्वसनीय repository, सामग्री या user को यह मान नियंत्रित करने देता है; prompt injection अपने आप इस code path तक नहीं पहुँचता।[2]
सीमा-प्रवाह: revision text और Git options
यह वैचारिक data-flow है, commands का क्रम या exploit का पुनरुत्पादन नहीं।
दो parsers, दो अलग boundaries
- Shell parsing
- Argument array shell को मान को shell syntax की तरह समझने से रोकती है और यह boundary बंद करती है।[3]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
यह upstream call boundary का सीमित उदाहरण है, scanner की पूरी प्रति नहीं। मर्ज किया गया बदलाव Git से पहले ref validate करता है; परीक्षण खाली और डैश से शुरू मान पर subprocess और upload न होने की पुष्टि करते हैं। आर्ग्युमेंट सूची shell parsing रोकती है, Git की option parsing नहीं। यह अंश केवल git diff कॉल दिखाता है; git archive सहित base_ref के हर उपयोग पर यही validation लागू होनी चाहिए।[3]
def start_diff_scan(path: str, base_ref: str):
# विकल्प जैसी ref जाँच से पहले Git तक पहुँचती है।
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
def _validate_git_ref(base_ref: str) -> None:
if not base_ref or not base_ref.strip():
raise ValueError("base_ref must not be empty.")
if base_ref.strip().startswith("-"):
raise ValueError("base_ref must not start with '-'.")
def start_diff_scan(path: str, base_ref: str):
_validate_git_ref(base_ref) # subprocess या upload शुरू करने से पहले अस्वीकार करें।
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓
awslabs.security-agent-mcp-serverको 0.1.1 से 0.1.x तक के संस्करणों से 0.2.0 या नए संस्करण में अपग्रेड करें; चल रही MCP प्रक्रिया का संस्करण जाँचें।[1], [2], [6] - ✓उपयोगकर्ता या repository से प्रभावित हर Git ref को Git subprocess से पहले validate करें और upload या अन्य side effects से पहले खाली तथा डैश से शुरू मान अस्वीकार करें।[2], [3]
- ✓ऐसे regression tests जोड़ें जो साबित करें कि शुरुआती डैश या केवल whitespace वाले ref से subprocess, upload या remote call नहीं होता;
main,origin/mainऔरHEAD~1जैसे वैध ref भी जाँचें।[3] - ✓Shell command string के बजाय argument list उपयोग करें, लेकिन बुलाए गए प्रोग्राम के option grammar के अनुसार हर argument अलग validate करें; shell escaping argument injection नहीं रोकती।[3]
- ✓स्थानीय MCP सर्वर को न्यूनतम filesystem permissions और अलग workspace में चलाएँ। यह असर सीमित करता है, अपडेट का विकल्प नहीं है।[1]
- ✓FlawOpen विश्लेषण: जिन वर्कफ़्लो में अविश्वसनीय सामग्री agent tool arguments तक पहुँचती है, उनमें tool invocation तक का पूरा मार्ग trace करें और MCP सर्वर में authorization तथा validation लागू करें।