FlawOpen

flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf

● CVE-2026-106032 · CVSS v4 5.7 · मध्यम
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-106032: AgentCore OpenAPI इंपोर्टर में SSRF

Starter Toolkit 0.3.13 और पुराने संस्करण एजेंट आयात करते समय बाहरी OpenAPI संदर्भ हल करते थे। बदले गए एक्शन-ग्रुप डेटा से आउटबाउंड अनुरोध या स्थानीय फ़ाइल पढ़ना संभव हो सकता था। 0.3.14 या नए संस्करण पर अपडेट करें, प्रभावित एजेंट फिर से आयात करें और बने आर्टिफैक्ट बदलें।[1], [2], [3]

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

इंपोर्टर को ऐसे कर्मचारी की तरह समझें जो दस्तावेज़ में दिए संदर्भों के आधार पर एक फ़ोल्डर तैयार करता है। कमजोर कर्मचारी हर संदर्भ का पीछा करता था, चाहे वह फ़ोल्डर के बाहर या स्थानीय फ़ाइल तक जाता हो। इसलिए भरोसेमंद दिखने वाला एजेंट भी काम के दौरान कंप्यूटर से डेटा मँगवा या पढ़वा सकता था। सुधार केवल उसी दस्तावेज़ के भीतर के संदर्भ स्वीकार करता है।[2], [7], [8]

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

OpenAPI $ref
OpenAPI स्कीमा या परिभाषा का संदर्भ। फ़्रैगमेंट वर्तमान दस्तावेज़ के भीतर जाता है; बाहरी संदर्भ किसी दूसरे संसाधन तक जा सकता है।[1]
Prance ResolvingParser
Starter Toolkit का पार्सर, जो एजेंट आयात करते समय OpenAPI संदर्भ लोड और हल करता है।[2]
SSRF
Server-side request forgery: अविश्वसनीय इनपुट सॉफ़्टवेयर से उसके अपने नेटवर्क स्थान से अनुरोध करवाता है।[7], [8]
CWE-918
CVE रिकॉर्ड का संरचित प्राथमिक cweId CWE-918 (Server-Side Request Forgery) है। इसके विवरण में फ़ाइल पथ पर बाहरी नियंत्रण वाले पहलू के लिए CWE-73 भी दिया गया है।[2], [3], [5]
CWE-73: External Control of File Name or Path
वही CVE रिकॉर्ड स्थानीय फ़ाइल पढ़ने वाले पहलू के लिए CWE-73 (फ़ाइल नाम या पथ पर बाहरी नियंत्रण) भी बताता है। CWE-73 समस्या-प्रकार के विवरण में है; संरचित प्राथमिक cweId CWE-918 है।[3], [9]

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

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

0.3.13 में get_agent_info() एक्शन-ग्रुप OpenAPI पेलोड को सीधे prance.ResolvingParser को देता था और संदर्भ समाधान के प्रकार सीमित नहीं करता था। 0.3.14 पहले assert_local_references_only() चलाता है। यह पुनरावर्ती जाँच उन स्ट्रिंग $ref मानों को अस्वीकार करती है जो आंतरिक फ़्रैगमेंट प्रीफ़िक्स #/ से शुरू नहीं होते, फिर resolve_types=RESOLVE_INTERNAL सेट होता है। इससे इस आयात पथ में पार्सर बाहरी OpenAPI संदर्भ प्राप्त नहीं करता। मेंटेनर के परीक्षण पार्सर चलने से पहले अस्वीकृति और HTTP, file, पूर्ण पथ तथा नेटवर्क-पथ संदर्भ जाँचते हैं; दस्तावेज़ के अंदर के फ़्रैगमेंट स्वीकार रहते हैं। इस निष्कर्ष को इंपोर्टर के अन्य पथों पर लागू न मानें और यह दावा न करें कि प्रक्रिया का हर नेटवर्क या फ़ाइल एक्सेस रुक जाता है। समर्थित सुधार अपडेट करना है; कोड तुलना स्रोत सीमा दिखाती है, शोषण निर्देश नहीं। GitHub advisory में @seankohjs को रिपोर्टर बताया गया है; AWS ने समन्वित प्रकटीकरण में सहयोग के लिए Koh Jun Sheng का आभार जताया है।[2], [7], [8], [1]

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

चरण 1

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

उसी AWS खाते के किसी प्रमाणीकृत principal के पास Bedrock Agent के action group OpenAPI schema को संशोधित करने की क्षमता होनी चाहिए, ताकि उसमें विशेष रूप से बनाया गया बाहरी reference value रखा जा सके। यह बिना प्रमाणीकरण वाला इंटरनेट हमला नहीं है।[2]

चरण 2

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

उपयोगकर्ता प्रभावित Starter Toolkit आयात प्रक्रिया चलाता है। कमजोर संस्करण इस चरण में एक्शन-ग्रुप OpenAPI संसाधित करते हैं।[1], [2]

चरण 3

पार्सर बाहरी संदर्भ हल करता है

0.3.13 दस्तावेज़ को केवल आंतरिक संदर्भों तक सीमित किए बिना ResolvingParser को देता था। बदला गया बाहरी संदर्भ आयात वातावरण से अनुरोध या स्थानीय फ़ाइल एक्सेस करा सकता था।[7], [2]

चरण 4

अपडेट करें, फिर आयात करें और आर्टिफैक्ट बदलें

0.3.14 या नया संस्करण स्थापित करें, प्रभावित संस्करणों से आयातित एजेंट फिर से आयात करें और स्थानीय तथा तैनात आर्टिफैक्ट बदलें। संभव हो तो पुराने Starter Toolkit से @aws/agentcore पर जाएँ।[1], [8]

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

ये अंश आधिकारिक 0.3.13 और 0.3.14 स्रोत वितरणों से हैं। सुधार Prance चलने से पहले बाहरी $ref अस्वीकार करता है और resolver को आंतरिक संदर्भों तक सीमित करता है। अपस्ट्रीम परीक्षण पार्सर से पहले अस्वीकृति और आंतरिक फ़्रैगमेंट की अनुमति जाँचते हैं। यह स्रोत कोड की सीमित तुलना है, अनुरोध उदाहरण नहीं; अंश कॉपी करने की जगह पैकेज अपडेट करें।[7], [8], [2]

सोर्स अंश: AgentCore इंपोर्टर संस्करण 0.3.13 और 0.3.14 के चुनिंदा अंश

कमज़ोर कार्यान्वयन
# 0.3.13: पार्सर OpenAPI दस्तावेज़ के संदर्भ हल करता है।
parser = ResolvingParser(
    spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
सुरक्षित और सुदृढ़ फ़िक्स
# 0.3.14: पार्स करने से पहले बाहरी संदर्भ अस्वीकार करें।
assert_local_references_only(action_group["apiSchema"]["payload"])
parser = ResolvingParser(
    spec_string=json.dumps(action_group["apiSchema"]["payload"]),
    resolve_types=RESOLVE_INTERNAL,
)

def assert_local_references_only(node, path: str = "$") -> None:
    if isinstance(node, dict):
        reference = node.get("$ref")
        if isinstance(reference, str) and not reference.startswith("#/"):
            raise ValueError(
                f"External OpenAPI references are not supported: {reference!r} at {path}."
            )
        for key, child in node.items():
            assert_local_references_only(child, f"{path}.{key}")
    elif isinstance(node, list):
        for index, child in enumerate(node):
            assert_local_references_only(child, f"{path}[{index}]")

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

स्रोत