flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf
CVE-2026-106032:AgentCore OpenAPI 导入器 SSRF
Starter Toolkit 0.3.13 及更早版本在导入代理时会解析外部 OpenAPI 引用。被篡改的操作组数据可能触发出站请求或读取本地文件。请升级到 0.3.14 或更高版本,重新导入受影响的代理,并替换生成的产物。[1], [2], [3]
可以把导入器想成按文档里的引用整理文件夹的职员。存在缺陷的职员会跟随所有引用,包括指向文件夹之外或本地文件的引用。因此,看似可信的代理也可能让工作站在整理时获取或读取数据。修复方案只允许引用同一文档中的内容。[2], [7], [8]
核心概念与专有名词
OpenAPI $ref- 指向 OpenAPI 架构或定义的引用。片段引用指向当前文档内部;外部引用可以指向其他资源。[1]
Prance ResolvingParser- Starter Toolkit 在代理导入期间用于加载和解析 OpenAPI 引用的解析器。[2]
框架映射
- 本指南所述弱点的 CWE 参考: CWE-918
- OWASP Top 10:2025 — A01:2025 Broken Access Control
根本原因剖析 (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 安全公告将 @seankohjs 列为报告者;AWS 感谢 Koh Jun Sheng 参与协调披露此漏洞。[2], [7], [8], [1]
攻击执行流程分解
同一账户中的主体修改代理数据
同一 AWS 账户中的已认证主体必须能够修改 Bedrock Agent 操作组的 OpenAPI 架构,才能在其中放入特制的外部引用值。这不是未经身份验证的互联网攻击。[2]
源代码对比:漏洞与安全实现
这些代码片段来自官方 0.3.13 和 0.3.14 源码发行包。修复会在调用 Prance 前拒绝外部 $ref,并将解析器限制为内部引用。上游测试检查解析前拒绝和内部片段解析。这是聚焦的源码比较,不是请求示例;请升级软件包,不要直接复制片段。[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}]")
工程与系统安全加固清单
- ✓盘点安装 bedrock-agentcore-starter-toolkit 的环境;0.1.4 至 0.3.13 受影响。[2]
- ✓升级到 0.3.14 或更高版本,或迁移到 AWS 推荐的 @aws/agentcore CLI;Starter Toolkit 已弃用。[1], [2]
- ✓重新导入由受影响版本导入的代理,并替换本地和已部署产物;仅升级软件包不能修复旧产物。[1]
- ✓迁移期间仅允许可信主体使用 bedrock:CreateAgentActionGroup、bedrock:UpdateAgentActionGroup 和 bedrock:AssociateAgentCollaborator。[2]
- ✓如果同一账户中的不可信主体可能修改了代理的 OpenAPI 架构或相关字段,请勿导入该代理。[2]
- ✓维护自有导入器时,在调用解析器前拒绝外部 OpenAPI 引用,并测试拒绝发生在解析器运行之前。[8]
- ✓将本问题与
CVE-2026-105812区分:本 CVE 是导入时解析引用,后者是生成不安全 Python 代码。[6], [2]
参考来源
- AWS 安全公告 2026-127
- 维护者公告 GHSA-5xmr-2rcp-3j75
- CVE-2026-106032 记录
- NVD:CVE-2026-106032
- MITRE CWE-918
- PyPI source distribution 0.3.13 (SHA-256: 6dc3df3719ce64f7e996fca63baedd15c922066271ce18f7a66cd7c24599bf8c)
- PyPI source distribution 0.3.14 (SHA-256: 2632c456926596061c3f4079b85d39be1b0aec95b2882048501517e5c3695c85)
- MITRE CWE-73:外部控制文件名或路径