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]
ソースコード比較:脆弱 vs 堅牢化
コード抜粋は公式の 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]
- ✓独自インポーターでは、resolver の前に外部 OpenAPI 参照を拒否し、パーサー実行前に拒否されるテストを追加します。[8]
- ✓
CVE-2026-106032とCVE-2026-105812を区別します。前者はインポート時の参照解決、後者は生成 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: ファイル名またはパスの外部制御