AI coding agentの間接プロンプトインジェクション対策|README・issue・外部ドキュメントを信じすぎない
AI coding agentがREADME、issue、外部ドキュメント、エラーメッセージを読むときに起きる間接プロンプトインジェクションを、防御目線で整理。AGENTS.md、Copilot code review、Codex、Claude Codeでの扱い方を解説します。
公開 2026.07.01 / 更新 2026.08.10
この記事のポイント
- README、issue、外部ページ、エラーメッセージは作業情報であって、上位指示ではない
- AGENTS.mdは便利なrepo規約だが、知らないrepoでは内容の妥当性を先に読む
- 外部URLを読むAIには、秘密情報・diff・ログの外部送信を禁止するルールが必要
agent phaseのnetworkとsetup scriptsのnetworkを分ける
Codex cloudで「agent internet accessをOFF」にしても、setup scriptsの依存取得まで自動的に同じ制限になるとは扱いません。agentがWebページ、issue、dependency READMEを読みながら実行する通信と、環境準備のためのsetup通信を別の段階として棚卸しし、どの段階で何が外部へ出るかを確認します。
| 設定・段階 | 公式Docsの説明 | 安全な開始点 |
|---|---|---|
| agent phase | 既定ではinternet accessをblockする | まずOFFのまま、必要性が説明できる作業だけ例外候補にする |
| setup scripts | 依存関係をinstallするためinternet accessがある | setupが読むscript、依存、送信先、ログをagent実行前に確認する |
| 環境単位 | Agent internet accessはenvironmentごとに設定する | repo全体や全taskの恒久許可とせず、対象environmentと所有者を記録する |
| On + domain | Onにしてもdomain allowlistで制限でき、None / Common dependencies / Allを選べる | Allを常用せず、NoneまたはCommon dependenciesから必要domainだけ追加する |
| HTTP methods | `GET`、`HEAD`、`OPTIONS`だけに制限でき、POST・PUT・PATCH・DELETEなどをblockできる | 読み取りが目的ならsafe methodsだけにし、書き込みmethodが必要な理由を別承認にする |
| 確認 | networkを狭くしてもagent outputとwork logをreviewする | 通信設定の成功を、secret非送信・安全な変更・公開可とは扱わない |
Codex cloudのnetworkを有効にする前の停止条件
- agent phaseのnetworkが本当に必要かを先に分け、公式Docsの閲覧や依存取得を一つの広い許可にまとめない。
- ONにするenvironment、対象task、期限、許可domain、HTTP method、送信してよいデータを依頼文とログへ残す。
- domain allowlistの`All (unrestricted)`を便利さだけで選ばず、NoneまたはCommon dependenciesから狭く始める。
- GET・HEAD・OPTIONSで足りる読み取り作業へPOST・PUT・PATCH・DELETEを許可しない。書き込みが必要なら送信先、payload、secret、監査ログを別に確認する。
- issue、README、Webページ、dependencyの説明に隠れた命令があっても、外部送信、secret、diff、ログの転送を実行しない。
- networkを有効にしたagentのoutput、work log、生成差分、取得した依存のlicense・脆弱性を確認し、完了報告だけで採用しない。
- setup scriptsが先にネット接続できる前提で、普段のAPI key、GitHub token、SSH key、cloud認証が同じenvironmentにないか確認する。
Codex Agent internet accessのFAQ
agent internet accessをOFFにすればsetupも安全ですか?
安全とは限りません。公式Docsではsetup scriptsは依存関係のinstall用にinternet accessを使えると説明されています。setupのscript、依存、送信先、secretの見える範囲を別に確認します。
domain allowlistを使えばprompt injectionはなくなりますか?
なくなりません。allowlistとHTTP method制限で通信範囲は狭められますが、許可domainのcontentやdependency READMEに悪意のある指示が含まれる可能性、secretやlicense、脆弱な依存のリスクは残ります。
GETだけなら外部送信は起きませんか?
GETでもURL query、header、取得内容、ログにsecretやdiffが混じれば情報が漏れる可能性があります。safe methodは追加の防御層であり、送信データとoutputのレビューを省略しません。