FlawOpen

flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection

● CVE-2026-105812 · CVSS v4 8.8 · उच्च
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-105812: AgentCore इम्पोर्टर में कोड इंजेक्शन

Bedrock AgentCore Starter Toolkit के 0.3.13 और उससे पुराने संस्करणों में एजेंट कॉन्फ़िगरेशन सुरक्षित एन्कोडिंग के बिना बने Python कोड में शामिल हो सकता था। दूसरा उपयोगकर्ता एजेंट इम्पोर्ट करके बाद में चलाए या डिप्लॉय करे तो कोड उसके स्थानीय अधिकारों या AgentCore Runtime execution role से चल सकता था। पैकेज अपडेट करने से पहले बने आर्टिफैक्ट ठीक नहीं होते।[1], [2], [3]

💡 आसान भाषा में (ELI5)

इम्पोर्टर एक ऐसे लेबल प्रिंटर जैसा है जो एजेंट की सेटिंग को Python निर्देशों में बदलता है। सुधार से पहले कुछ मान सुरक्षित रूप से एस्केप किए बिना उद्धरण-चिह्नों के बीच जोड़े जाते थे। मान में मौजूद उद्धरण स्ट्रिंग को समय से पहले बंद कर सकता था और आगे का पाठ Python सिंटैक्स बन सकता था। सुधार मान को Python string literal के रूप में एन्कोड करता है, ताकि वह डेटा ही रहे।[2], [5]

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

एजेंट इम्पोर्ट
Starter Toolkit का वह प्रवाह जो Bedrock एजेंट कॉन्फ़िगरेशन पढ़कर Strands या LangChain जैसे फ़्रेमवर्क के लिए स्थानीय Python प्रोजेक्ट बनाता है।[2], [5]
कोड जनरेशन
प्रोग्राम टेम्पलेट को कॉन्फ़िगरेशन मानों या अन्य इनपुट के साथ जोड़कर स्रोत कोड बनाना।[2], [5]
Python string literal
स्रोत कोड में पाठ को डेटा के रूप में दर्शाने की लिखावट। repr() एस्केप किए गए अक्षरों वाला उद्धरणयुक्त रूप लौटाता है, ताकि वे Python सिंटैक्स न बनें।[5]
CWE-94
कोड जनरेशन पर अनुचित नियंत्रण: इनपुट डेटा सुरक्षित एन्कोडिंग के बिना बने स्रोत कोड में डाला गया।[2], [3]
जनरेट किया गया आर्टिफैक्ट
एजेंट इम्पोर्ट से बना स्थानीय या डिप्लॉय किया गया कोड। AWS के अनुसार प्रभावित आर्टिफैक्ट बदलने होंगे; केवल इम्पोर्टर अपडेट करना पर्याप्त नहीं है।[1], [2]

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

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

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

कमज़ोर इम्पोर्ट ट्रांसलेटर f-string और टेम्पलेट से Python स्रोत बनाता था और Bedrock एजेंट के मान—जैसे प्रॉम्प्ट तथा अन्य कॉन्फ़िगरेशन फ़ील्ड—सीधे जोड़ता था। Python string delimiter वाले मान निर्धारित पाठ संदर्भ से बाहर निकल सकते थे। 0.3.14 सुधार में repr(str(value)) वाला python_string_literal() और JSON-संगत डेटा को सामान्य करने वाला python_data_literal() जोड़ा गया; जनरेट की गई स्ट्रिंग इन एन्कोडर से गुजरती हैं। मेंटेनर सलाह के अनुसार श्रृंखला के लिए उसी AWS खाते का प्रमाणित प्रधान एजेंट डेटा बदलने में सक्षम हो, फिर दूसरा उपयोगकर्ता एजेंट इम्पोर्ट करके बने प्रोजेक्ट को चलाए या डिप्लॉय करे। कोड इम्पोर्ट करने वाले के स्थानीय अधिकारों या AgentCore Runtime execution role से चलता है। AWS बताता है कि प्रभावित संस्करण से बने आर्टिफैक्ट केवल अपग्रेड करने से ठीक नहीं होते: 0.3.14 या नए संस्करण से फिर इम्पोर्ट करें और स्थानीय तथा डिप्लॉय किए गए आउटपुट बदलें। CVE-2026-106032 अलग समस्या है—इम्पोर्ट के समय बाहरी OpenAPI संदर्भों से जुड़ी, यह कोड जनरेशन दोष नहीं है।

जनरेट किए गए कोड की खामी तक पहुँचने की शर्तें

सीमादस्तावेज़ित शर्तरक्षात्मक कार्रवाई
Toolkit संस्करण0.3.13 तक के संस्करण कुछ मानों को सुरक्षित literal encoding के बिना जनरेट किए गए Python में डालते थे।0.3.14 या नए संस्करण पर अपडेट करें, या @aws/agentcore पर माइग्रेट करें।
डेटा कौन बदल सकता हैउसी AWS खाते का प्रमाणित principal Bedrock Agent के संबंधित फ़ील्ड बदल सकता है।एजेंट डेटा लिखने की अनुमति केवल विश्वसनीय principals को दें।
दूसरे उपयोगकर्ता द्वारा आयातदूसरा उपयोगकर्ता प्रभावित Starter Toolkit workflow से बदले हुए एजेंट को आयात करता है।अन्य principals से मिले एजेंट डेटा को अविश्वसनीय मानें और आयात से पहले उसका स्रोत जाँचें।
निष्पादन की शर्तआयात करने वाला उपयोगकर्ता जनरेट किए गए प्रोजेक्ट को चलाता या deploy करता है; कोड स्थानीय privileges या AgentCore Runtime role से चलता है।अलग-थलग, least-privilege credentials और runtime roles के साथ आयात व परीक्षण करें।
पहले से जनरेट आर्टिफ़ैक्टपैकेज अपडेट करने से प्रभावित संस्करणों द्वारा पहले जनरेट किए गए प्रोजेक्ट ठीक नहीं होते।fixed संस्करण से फिर आयात करें और स्थानीय तथा deployed artifacts बदलें।

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

चरण 1

उसी खाते का प्रधान एजेंट डेटा बदल सकता है

शर्त यह है कि AWS खाते का प्रमाणित प्रधान संबंधित Bedrock Agent फ़ील्ड—जैसे action-group schema, collaboration निर्देश या prompt override—बदल सके।[2]

चरण 2

दूसरा उपयोगकर्ता एजेंट इम्पोर्ट करता है

प्रभावित Starter Toolkit प्रवाह बदला हुआ डेटा पढ़कर Python प्रोजेक्ट बनाता है। दोष स्रोत कोड जनरेशन की सीमा पर है; सामान्य इम्पोर्ट से परिणाम तुरंत नहीं चलता।[2], [5]

चरण 3

बिना एन्कोड किए मान Python स्रोत में आते हैं

0.3.13 और पुराने संस्करणों में कुछ स्वतंत्र कॉन्फ़िगरेशन मान सुरक्षित literal encoding के बिना उद्धरणयुक्त Python टेम्पलेट में जोड़े जाते थे।[2], [5]

चरण 4

बना हुआ प्रोजेक्ट चलाया या डिप्लॉय किया जाता है

इम्पोर्ट किए एजेंट को चलाने या डिप्लॉय करने पर बना कोड उपयोगकर्ता के स्थानीय अधिकारों या AgentCore Runtime execution role से चल सकता है।[1], [2]

चरण 5

अपडेट करें और बने आउटपुट बदलें

0.3.14 में Python literal encoding जोड़ी गई। सुधारे संस्करण से फिर इम्पोर्ट करें और स्थानीय तथा डिप्लॉय किए आउटपुट बदलें; AWS पुराने Starter Toolkit से @aws/agentcore पर जाने की सलाह देता है।[1], [5]

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

यह upstream diff अंश दिखाता है कि कमज़ोर ट्रांसलेटर कॉन्फ़िगरेशन को सीधे triple-quoted Python string में जोड़ता था। सुधार पूरा पाठ python_string_literal() को देता है, जो repr() से उसे डेटा के रूप में एस्केप करता है। संस्करण 0.3.14 यही तरीका दूसरी जनरेट की गई strings और JSON-संगत डेटा पर भी लागू करता है। regression tests आउटपुट को parse करके जाँचते हैं कि marker string constant ही रहे। यह स्रोत कोड का विश्लेषण है, कोई injected मान या चलाया जा सकने वाला exploit नहीं।[2], [5]

सोर्स अंश: services/import_agent/scripts/base_bedrock_translate.py और services/import_agent/utils.py — PRE_PROCESSING prompt का संबंधित अंश

कमज़ोर कार्यान्वयन
# 0.3.14 सुधार से पहले: टेम्पलेट मान सीधे ट्रिपल-कोट वाले Python स्रोत में डाला जाता था।
self.prompts_code += f"""
    PRE_PROCESSING_TEMPLATE=\"""\n
    {config["basePromptTemplate"]["system"]}
    \"""
"""
सुरक्षित और सुदृढ़ फ़िक्स
# 0.3.14: पूरे मान को Python स्ट्रिंग लिटरल के रूप में एन्कोड करें
prompt = f"\n\n    {config['basePromptTemplate']['system']}\n    "
self.prompts_code += f"\n    PRE_PROCESSING_TEMPLATE={python_string_literal(prompt)}\n"

# services/import_agent/utils.py
def python_string_literal(value: Any) -> str:
    return repr(str(value))

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

स्रोत