# エージェンティックセキュリティのすべて 簡潔ガイド _everything claude code / research / security_ --- 前回の記事から少し間が空きました。ECCの開発ツールエコシステムの構築に時間を費やしていました。その間のホットかつ重要なトピックの1つがエージェントセキュリティです。 オープンソースエージェントの広範な普及が来ています。OpenClawなどがあなたのコンピュータ上で動作します。Claude CodeやCodex(ECCを使用)のような継続実行ハーネスは攻撃対象面を拡大します。そして2026年2月25日、Check Point Researchが「これは起こりうるが起こらない / 大げさだ」という議論のフェーズを終わらせるべきClaude Codeの開示を公開しました。ツールがクリティカルマスに達し、エクスプロイトの重大性は倍増しています。 1つの問題、CVE-2025-59536(CVSS 8.7)は、プロジェクトに含まれるコードがユーザーがトラストダイアログを受け入れる前に実行されることを可能にしました。もう1つのCVE-2026-21852は、攻撃者が制御する`ANTHROPIC_BASE_URL`を通じてAPIトラフィックをリダイレクトし、トラストが確認される前にAPIキーを漏洩させることを可能にしました。必要だったのは、リポジトリをクローンしてツールを開くだけでした。 私たちが信頼するツールは、同時に標的にされるツールでもあります。それがシフトです。プロンプトインジェクションはもはや面白いモデルの失敗や面白いジェイルブレイクのスクリーンショットではありません(下に面白いものを1つ共有しますが)。エージェンティックシステムでは、シェル実行、シークレット露出、ワークフローの悪用、あるいは静かなラテラルムーブメントになりえます。 ## 攻撃ベクトル / サーフェス 攻撃ベクトルは本質的にすべてのインタラクションのエントリーポイントです。エージェントが接続するサービスが多いほど、リスクが蓄積されます。エージェントに供給される外部情報がリスクを増大させます。 ### 攻撃チェーンと関与するノード / コンポーネント ![Attack Chain Diagram](./assets/images/security/attack-chain.png) 例えば、あなたのエージェントがゲートウェイレイヤーを介してWhatsAppに接続されているとします。攻撃者があなたのWhatsApp番号を知っています。既存のジェイルブレイクを使ってプロンプトインジェクションを試みます。チャットにジェイルブレイクをスパムします。エージェントがメッセージを読み、指示として受け取ります。プライベート情報を明かすレスポンスを実行します。エージェントがroot権限、広範なファイルシステムアクセス、または有用な認証情報を持っている場合、あなたは侵害されています。 Good Rudiジェイルブレイクのクリップのような、人々が笑うもの(面白いのは認めますが)でさえ、同じクラスの問題を指しています:繰り返しの試行、最終的に機密情報の露出、表面上はユーモラスですが根底にある失敗は深刻です — つまり、これは子供向けに作られたものですから、ここから少し推測すれば、なぜこれが壊滅的になりうるかの結論にすぐ到達するでしょう。モデルが実際のツールと実際のパーミッションに接続されている場合、同じパターンはさらに遠くまで行きます。 WhatsAppはほんの一例です。メール添付ファイルは巨大なベクトルです。攻撃者がプロンプトが埋め込まれたPDFを送信し、エージェントが仕事の一環として添付ファイルを読み、有益なデータであるべきテキストが悪意ある指示になります。OCRを行っている場合、スクリーンショットやスキャンも同様に危険です。Anthropic自身のプロンプトインジェクション研究では、隠しテキストと操作された画像を実際の攻撃素材として明示的に挙げています。 GitHub PRレビューもターゲットです。悪意ある指示は隠れたdiffコメント、Issue本文、リンクされたドキュメント、ツール出力、さらには「親切な」レビューコンテキストに潜むことができます。上流にボット(コードレビューエージェント、Greptile、Cubicなど)を設定しているか、下流でローカルの自動化アプローチ(OpenClaw、Claude Code、Codex、Copilotコーディングエージェント等)を使用している場合、低い監視と高い自律性でPRをレビューすることは、プロンプトインジェクションの攻撃対象面リスクを増大させ、そのエクスプロイトであなたのリポジトリの下流にいるすべてのユーザーに影響を与えます。 GitHub自身のcoding-agentの設計は、その脅威モデルの静かな認知です。書き込みアクセスを持つユーザーのみがエージェントに作業を割り当てられます。低権限のコメントはエージェントに表示されません。隠し文字はフィルタリングされます。プッシュは制約されます。ワークフローは依然として人間が**承認して実行**をクリックする必要があります。 MCPサーバーはまったく別のレイヤーです。偶然脆弱になったり、設計上悪意があったり、単にクライアントから過度に信頼されたりする可能性があります。ツールはコンテキストを提供するように見せかけながらデータを流出させることができます。OWASPがまさにこの理由でMCP Top 10を公開しています:ツールポイズニング、コンテキストペイロードによるプロンプトインジェクション、コマンドインジェクション、シャドウMCPサーバー、シークレット露出。 Simon Willisonの「致死的三連鎖」のフレーミングは、これについて考える最もクリーンな方法です:プライベートデータ、信頼できないコンテンツ、外部通信。3つすべてが同じランタイムに存在すると、プロンプトインジェクションは面白いものではなくなり、データ流出になり始めます。 ## Claude Code CVE(2026年2月) Check Point Researchは2026年2月25日にClaude Codeの調査結果を公開しました。問題は2025年7月から12月の間に報告され、公開前にパッチが適用されました。 重要なのはCVE IDと事後分析だけではありません。ハーネスの実行レイヤーで実際に何が起きているかを私たちに明らかにしています。 **CVE-2025-59536。** プロジェクトに含まれるコードがトラストダイアログが受け入れられる前に実行される可能性がありました。NVDとGitHubのアドバイザリーはこれを`1.0.111`より前のバージョンに関連付けています。 **CVE-2026-21852。** 攻撃者が制御するプロジェクトが`ANTHROPIC_BASE_URL`をオーバーライドし、APIトラフィックをリダイレクトし、トラスト確認前にAPIキーを漏洩させる可能性がありました。NVDは手動更新者は`2.0.65`以降にすべきとしています。 **MCP同意の悪用。** Check Pointは、リポジトリ制御のMCP設定とセッティングが、ユーザーがディレクトリを有意義に信頼する前にプロジェクトMCPサーバーを自動承認できることも示しました。 ## 過去1年で変わったこと この議論は2025年と2026年初頭に急速に進みました。 Snykの2026年2月のToxicSkills研究は3,984の公開スキルをスキャンし、36%にプロンプトインジェクションを発見、1,467の悪意あるペイロードを特定しました。スキルはサプライチェーンアーティファクトとして扱ってください。なぜならそれがまさにその通りだからです。 ## リスクの定量化 頭に入れておくべきクリーンな数値: | 統計 | 詳細 | |------|------| | **CVSS 8.7** | Claude Codeフック / トラスト前実行の問題:CVE-2025-59536 | | **31社 / 14業界** | Microsoftのメモリポイズニングレポート | | **3,984** | SnykのToxicSkills研究でスキャンされた公開スキル | | **36%** | その研究でプロンプトインジェクションが含まれるスキル | | **1,467** | Snykが特定した悪意あるペイロード | | **17,470** | Hunt.ioが露出していると報告したOpenClawファミリーインスタンス | ## サンドボックス root権限は危険です。広範なローカルアクセスは危険です。同じマシン上の長寿命の認証情報は危険です。「YOLO、Claudeがカバーしてくれる」は正しいアプローチではありません。答えは分離です。 ### まずアイデンティティを分離 エージェントに個人のGmailを渡さないでください。`agent@yourdomain.com`を作成してください。メインのSlackを渡さないでください。ボットユーザーまたはボットチャネルを作成してください。個人のGitHubトークンを渡さないでください。短寿命のスコープトークンまたは専用のボットアカウントを使用してください。 エージェントがあなたと同じアカウントを持っている場合、侵害されたエージェントはあなたそのものです。 ### 信頼できない作業は分離環境で実行 信頼できないリポジトリ、添付ファイルの多いワークフロー、または多くの外部コンテンツを取り込むものは、コンテナ、VM、devcontainer、またはリモートサンドボックスで実行してください。 Docker Composeまたはdevcontainerを使用して、デフォルトでエグレスなしのプライベートネットワークを作成: ```yaml services: agent: build: . user: "1000:1000" working_dir: /workspace volumes: - ./workspace:/workspace:rw cap_drop: - ALL security_opt: - no-new-privileges:true networks: - agent-internal networks: agent-internal: internal: true ``` `internal: true`が重要です。エージェントが侵害されても、明示的にルートを与えない限りフォンホームできません。 ### ツールとパスを制限 ```json { "permissions": { "deny": [ "Read(~/.ssh/**)", "Read(~/.aws/**)", "Read(**/.env*)", "Write(~/.ssh/**)", "Write(~/.aws/**)", "Bash(curl * | bash)", "Bash(ssh *)", "Bash(scp *)", "Bash(nc *)" ] } } ``` ## サニタイゼーション LLMが読むものはすべて実行可能なコンテキストです。テキストがコンテキストウィンドウに入ると、「データ」と「命令」の間に有意義な区別はありません。 ### 隠しUnicodeとコメントペイロード ```bash # ゼロ幅およびbidi制御文字 rg -nP '[\x{200B}\x{200C}\x{200D}\x{2060}\x{FEFF}\x{202A}-\x{202E}]' # HTMLコメントまたは疑わしい隠しブロック rg -n '