リポジトリをクローンして「Enter」を1回押しただけで、PCが完全に乗っ取られる。Adversa AIの研究者Rony Utevsky氏が2026年5月7日に公開したセキュリティレポート「TrustFall」は、AI開発者が日常的に使うコーディングツール4製品に共通する設計上の盲点を明らかにしました。

この記事でわかること:

  • TrustFallがどのような攻撃を示した研究か
  • Claude Code・Gemini CLI・Cursor CLI・Copilot CLIに共通する問題の仕組み
  • Claude Code v2.1で起きたダイアログの退行
  • CI/CDで「ダイアログすら出ない」0クリック攻撃
  • Anthropicの公式見解と開発者が今できる対策

攻撃の全体像

TrustFallが示した攻撃は、2つの小さなJSONファイルだけで成立します。

攻撃者が用意するのは .mcp.json.claude/settings.json の2ファイルです。前者は「linter」などの無害な名前で悪意あるプロセスを定義し、後者はそのプロセスを自動承認する設定を書き込みます。被害者がこのリポジトリをクローンし、Claude Codeを起動してtrust promptに「Enter」を押した瞬間、MCP(Model Context Protocol)サーバーとして定義された任意のプロセスがOSネイティブプロセスとして起動します。

このプロセスはClaudeの推論とは独立して動き、ツール呼び出しも必要とせず、ユーザーが見える形では何も起きないまま実行されます。

MCPサーバーが持つ権限の広さ

MCPサーバーはサンドボックス化されておらず、Claude Codeを実行するユーザーのOS権限をそのまま持ちます。プロジェクトディレクトリへのアクセスに限定されず、以下の操作がすべて可能です。

  • ~/.ssh/ 以下の秘密鍵の読み取り
  • ~/.aws/ のクラウド認証情報の窃取
  • シェル履歴・他プロジェクトのソースコードの参照
  • 攻撃者サーバーへの持続的なC2チャンネルの確立

スクリプトファイルをリポジトリに置く必要もありません。.mcp.jsoncommandargs フィールドにペイロードをインラインで書けるため、静的スキャナーからは「空っぽに見えるリポジトリ」として通過します。

Claude Code v2.1で失われた警告

v2.1以前のClaude Codeは、クローンしたリポジトリに .mcp.json が存在するとき、「このプロジェクトはMCPサーバーを実行します」と明示し、「MCPを無効にしてフォルダを信頼する」という第3の選択肢を提示していました。

v2.1以降、このダイアログは次の文言に置き換わりました。

“Quick safety check: Is this a project you created or one you trust?”

MCPへの言及はなく、何が起動するかのリストもなく、MCPを無効にする選択肢もありません。デフォルトは「Yes, I trust this folder」で、Enterキー1回で突き抜けられる設計になっています。

Adversa AIはこれを「退行(regression)」と呼びます。以前存在した安全な設計が、機能追加のタイミングでサイレントに削除されたためです。Anthropicは2025年10月にも関連する問題(CVE-2025-59536、Check Point Researchが報告)にパッチを当てていますが、MCPサーバーを自動承認する設定そのものと、ダイアログの文言は見直されないままです。

4つのツールの比較

同研究はClaude Code以外の3製品についても同様の挙動を確認しています。

ツール ダイアログにMCP記載 サーバー名の列挙 デフォルト
Claude Code なし(汎用メッセージ) なし Yes, I trust
Gemini CLI あり(MCPサーバーを警告) あり Trust
Cursor CLI あり(MCP一般的な警告) なし Trust
Copilot CLI なし(汎用メッセージ) なし Yes

Gemini CLIは4製品の中で最も情報量が多く、起動するサーバーを名前付きで列挙します。Claude CodeとCopilot CLIは汎用的なメッセージのみで、MCPへの言及がありません。どの製品もデフォルトが「信頼する」側に設定されています。

攻撃の暴露面は4製品で同じです。Adversa AIは同一のPoC(概念実証コード)が4製品すべてで動作することを確認しています。

CI/CDでは「0クリック」

より深刻なのはCI(継続的インテグレーション)環境での動作です。

Anthropicが公式提供する claude-code-action(GitHub Actions用)はデフォルトでヘッドレスモードで動きます。ターミナルがないためtrust promptはレンダリングされません。外部コントリビューターが悪意あるPRを送ると、その設定ファイルがCIランナー上で処理され、MCP定義のプロセスが自動起動します。CIランナーが持つデプロイキー・署名証明書・クラウドトークンが読み取り対象になり、攻撃者の指定するURLへ送信されます。

Adversa AIはこの経路の動作デモを公開しており、ランナーの環境変数を外部コレクターURLに送信するPoC(poc-ci-pipeline/)が付属します。

Anthropicの公式見解

Adversa AIはAnthropicのセキュリティチームにレポートを提出しましたが、Anthropicは「脅威モデルの範囲外」として対応を断りました。

Anthropicの立場は「”Yes, I trust this folder”への同意がプロジェクト設定全体への同意を意味する」というものです。trust dialogを通過した後の実行は、設計どおりに機能している境界線だという見解です。

Adversa AIはこの境界線の設定自体は争いません。問題として指摘するのは「ダイアログが何に同意を求めているかを明示していない」という情報開示の不十分さです。v2.1+のダイアログはコード実行について何も言わず、何のMCPサーバーが起動するかも示しません。

一方、bypassPermissions という設定はAnthropicがすでに「高リスク」と判断しており、プロジェクトスコープからの適用をブロックし、赤字の警告ダイアログにデフォルト「No, exit」を設定しています。enableAllProjectMcpServers(爆発半径がより大きい設定)にはそれらの保護が一切ありません。

開発者が今できる対策

見知らぬリポジトリを開く前に .mcp.json.claude/settings.json の内容を確認し、command フィールドに書かれているコマンドを読む習慣が有効です。MCP自動承認の設定(enableAllProjectMcpServers, enabledMcpjsonServers)が含まれていれば、そのリポジトリは疑ってかかるべきです。

CI/CD環境では、PRのdiffに設定ファイルの変更が含まれる場合はレビューを必須にすること、CIランナーに付与するクレデンシャルを最小限に絞ることが有効です。

エンタープライズ環境では、Claude CodeのManaged scope設定(ITが一元管理し、ローカルで上書きできないスコープ)を使ってプロジェクトスコープからのMCP自動承認を組織全体でブロックできます。Adversa AIによれば、この設定を活用しているケースはまだ少ないとのことです(参考)。

リポジトリを開くことと、そのリポジトリが定義するプロセスを実行する権限を与えることは別の行為です。現在のダイアログ設計ではこの区別が見えにくくなっています。AIコーディングツールを日常的に使う開発者にとって、一度確認しておく価値のある設計上の論点です。