flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection
CVE-2026-105812:AgentCore取込時のコード注入
Bedrock AgentCore Starter Toolkit 0.3.13以前では、エージェント設定が安全にエンコードされず、生成Pythonに取り込まれる場合がありました。別の利用者がエージェントをインポートし、その後実行またはデプロイすると、生成コードが利用者のローカル権限またはAgentCore Runtime実行ロールで動く可能性があります。パッケージを更新しても、生成済みの成果物は修復されません。[1], [2], [3]
インポーターは、エージェントの設定をPython命令に変換するラベルプリンターのようなものです。修正前は、一部の値が安全にエスケープされず引用符の間に貼り付けられていました。値に含まれる引用符で文字列が早く閉じ、続きがPython構文として解釈されることがあります。修正では値をPython文字列リテラルとしてエンコードし、データのまま保ちます。[2], [5]
主要な概念と専門用語
エージェントのインポート- Bedrockエージェントの設定を読み取り、StrandsやLangChainなどのフレームワーク向けにローカルPythonプロジェクトを生成するStarter Toolkitの処理。[2], [5]
Python文字列リテラル- テキストをデータとして表すソースコード上の記法。
repr()は文字をエスケープした引用形式を返し、Python構文になることを防ぎます。[5]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-94
根本原因の分析 (Root Cause)
脆弱なインポート変換処理は、f-stringとテンプレートを使ってPythonを組み立て、プロンプトなどBedrockエージェントの設定値を直接埋め込んでいました。Python文字列の区切り文字を含む値は、想定されたテキストの文脈から抜け出す可能性がありました。0.3.14の修正では、repr(str(value))を使うpython_string_literal()と、JSON互換データを正規化するpython_data_literal()を導入し、生成文字列をこれらのエンコーダーに通します。メンテナーのアドバイザリが示す攻撃連鎖では、同じAWSアカウント内の認証済み主体がエージェントデータを変更でき、別の利用者がそれをインポートした後、生成プロジェクトを実行またはデプロイする必要があります。生成コードは利用者のローカル権限またはAgentCore Runtime実行ロールで動きます。AWSは、影響バージョンで作られた成果物について更新だけでは不十分と説明しています。0.3.14以降で再インポートし、ローカルおよびデプロイ済みの出力を置き換えてください。CVE-2026-106032はインポート時の外部OpenAPI参照に関する別の問題であり、このコード生成の欠陥とは異なります。
生成コードの脆弱性に到達する条件
| 境界 | 文書化された条件 | 防御策 |
|---|---|---|
| Toolkit のバージョン | 0.3.13 以前は、一部の値を安全なリテラルエンコードなしで生成 Python に挿入していた。 | 0.3.14 以降へアップグレードするか、@aws/agentcore に移行する。 |
| データを変更できる主体 | 同じ AWS アカウント内の認証済みプリンシパルが Bedrock Agent の関連フィールドを変更できる。 | エージェントデータの書き込み権限を信頼できるプリンシパルに限定する。 |
| 別ユーザーによるインポート | 別のユーザーが影響を受ける Starter Toolkit の手順で変更済みエージェントをインポートする。 | 他のプリンシパルが提供したエージェントデータを信頼せず、インポート前に出所を確認する。 |
| 実行の契機 | インポートしたユーザーが生成プロジェクトを実行またはデプロイすると、そのコードはローカル権限または AgentCore Runtime ロールで動作する。 | 分離した最小権限の認証情報とランタイムロールでインポートとテストを行う。 |
| 生成済みの成果物 | パッケージを更新しても、影響バージョンで既に生成されたプロジェクトは修正されない。 | 修正版で再インポートし、ローカルとデプロイ済みの成果物を置き換える。 |
ステップ・バイ・ステップの攻撃フロー
同じアカウントの主体がエージェントデータを変更できる
前提条件は、AWSアカウントの認証済み主体が、アクショングループのスキーマ、コラボレーション指示、プロンプトの上書きなど、Bedrock Agentの関連フィールドを変更できることです。[2]
ソースコード比較:脆弱 vs 堅牢化
この上流差分の抜粋では、脆弱な変換処理が設定値を三重引用符のPython文字列へ直接埋め込んでいたことが分かります。修正では完成したテキストを python_string_literal() に渡し、repr() でデータとしてエスケープします。0.3.14では他の生成文字列とJSON互換データにも同じ原則を適用し、出力を解析してマーカーが文字列定数のままか確認する回帰テストも追加されました。これはソースコードの分析であり、注入値や実行可能なエクスプロイトではありません。[2], [5]
ソース抜粋: services/import_agent/scripts/base_bedrock_translate.py と services/import_agent/utils.py — PRE_PROCESSINGプロンプトの該当箇所
# 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))
エンジニアリング&システム堅牢化チェックリスト
- ✓
bedrock-agentcore-starter-toolkitを使う開発端末とCIジョブを、依存マニフェストだけでなくフォークやローカルに取り込んだコピーも含めて洗い出します。[1], [2] - ✓0.3.14以降へ更新するか、サポート対象の
@aws/agentcoreCLIへ移行します。Starter Toolkitは非推奨です。[1], [2] - ✓影響バージョンで生成したエージェントを再インポートし、ローカルおよびデプロイ済み成果物を置き換えます。パッケージ更新だけでは古い生成ソースが残ります。[1], [2]
- ✓メンテナーの推奨に従い、
bedrock:CreateAgentActionGroup、bedrock:UpdateAgentActionGroup、bedrock:AssociateAgentCollaboratorを信頼できる主体に限定します。[2] - ✓特権開発環境へインポートする前に、同じアカウントの他の主体がBedrock Agentのどのデータフィールドを変更できるか確認します。[2]
- ✓生成Pythonを解析する回帰テストを追加し、制御したマーカー文字列が文字列定数内に留まり、新しい代入や実行文にならないことを確認します。[5]
- ✓インポートしたエージェントは最小権限のローカル認証情報とRuntimeロールで実行し、将来の生成器欠陥の影響を抑えます。[1]
- ✓CVE-2026-106032は別に扱います。インポート時の外部OpenAPI参照によるSSRFとローカルファイルアクセスであり、欠陥箇所も修正も異なります。[6], [9]
参考資料
- AWS Security Bulletin 2026-127-AWS
- Maintainer advisory GHSA-37r5-8xpw-vxp9
- CVE-2026-105812 record
- NVD record for CVE-2026-105812
- Upstream fix commit 38545b1
- Separate CVE-2026-106032 maintainer advisory
- Control Plane coverage, October 7, 2026 (attention signal)
- TechGeeks coverage, October 6, 2026 (attention signal)