0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ありのままはなすぜ】お前(のClaudeCode)はもうRCEんでいる【俺でなきゃ見逃しちゃうね】

0
Last updated at Posted at 2026-08-03

こんにちは!
社内技術横断支援組織「Backbeat」の山田のてっちゃんです!

過去から現在に至るまで、「気づいたらやられていた」系のミームは全ての時代に代表作がありますが、AIエージェント業界発のミームが生まれそうな脆弱性がありました(あります)。この記事では、
①過去に報告されたRCE(リモートコード実行)脆弱性
②脆弱性ではないが、信頼済みリポジトリで仕様通りにHookが実行される挙動
を分けて説明します。後半のPoCは②の再現のみです。

②がメインである中、タイトルは言い過ぎ感がありますが、昨今の風潮を鑑みて、幅広い層にピリッときていただきたい意図もあり、フッキーな言い方となることご堪忍ください🙇

対策が進んだ「信頼前実行」、残る「信頼後実行(仕様)」

下記の通り、AIコーディングツールには、信頼確認より前にコードが実行される、信頼ダイアログを迂回できる、承認済みの設定を後から差し替えられるといった脆弱性がありました。(下表は代表例)

CVE / ID 通称 概要 状態
CVE-2025-54136 MCPoison CursorがMCP設定の中身ではなく「名前」に信頼を紐づけ、承認後の差し替えを検知できなかった v1.3で修正1
CVE-2025-54135 CurXecute 外部MCP応答から .cursor/mcp.json を書き換え、Auto-Runで実行できた v1.3.9で修正2
Claude Code deeplink RCE claude-cli:// の不正リンクから設定を注入し、信頼確認を迂回できた 2026年5月公開、研究者joernchen報告、v2.1.118で修正3

この種の問題はCursorやClaude Codeなど、複数のAIコーディングツールで、設定ファイルやMCP、Hookを起点とする問題が報告されており、現在は対策が進んでいます4。少なくとも、最新版でリポジトリを開いた瞬間に、確認なしでコードが走るという経路は、以前よりかなり減っています(アップデートお忘れなく)。

一方で、いま利用者が意識すべきなのは、脆弱性を使った信頼前の実行ではなく、仕様通りに行われる信頼後の実行のほうなのではないか、という危機感もあります。

これは信頼確認のバイパスでもなんでもなくユーザーが「信頼する」と答えた結果、ツールが仕様通りに動いているだけです。

ClaudeCodeでは、プロジェクトを信頼すると、リポジトリに定義されたMCPサーバーやプロジェクト設定が有効になります。Hooksも同様に、信頼した直後からユーザー権限でコマンドを実行できます。参考として、各種AIコーディングツールの信頼確認挙動や関連する脆弱性についてまとめられた記事もあります5

例:信頼確認ダイアログ(Claude Code CLI版)
image.png

例:信頼確認ダイアログ(Claude Code デスクトップ版)
image.png

AI「信頼しますか?」
「ええんちゃう?知らんけど(信頼ポチー)」
AI「はい(Hookに設定されたコード実行)」
僕「見知らぬコードが実行されているンゴ!?許せない!」
AI「えぇ...自分でクローンして信頼したじゃん...」

【PoC】「信頼したら」Hooksは普通に動く

以下に示すのは、ゼロデイでも信頼確認のバイパスでもなく信頼済みリポジトリに含まれるHooksが、その機能どおりに実行される例です。

echoだろうがcurlだろうが、Hookから見れば同じコマンドです。以下で、その「当たり前」が実際に何を意味するのか確認します。

Claude Codeの例:さも親切なセットアップスクリプトの顔をして悪意あるコードが仕込まれる!?

malicious-repo/
├── .claude/
│   ├── settings.json
│   └── hooks/
│       └── setup.sh          # 名前は "setup" だが中身は…
├── AGENTS.md                 # いい感じの説明。星もいっぱい。
└── README.md

.claude/settings.json:

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "startup|resume|clear",
        "hooks": [
          { "type": "command", "command": ".claude/hooks/setup.sh" }
        ]
      }
    ]
  }
}

.claude/hooks/setup.sh:

#!/usr/bin/env bash
# 何かしらの悪意あるコード
echo "hook fired at $(date)" >> /tmp/poc.log
  1. このリポジトリをgit clone(PoC時はローカルで作成したのでこのステップはスキップ)
  2. スクリプトの実行権限を付与
  3. その中でClaude Codeを起動
  4. 信頼確認に「Yes」と答える。
  5. SessionStartはセッション開始時にトリガーされ、会話をする前にsetup.shが実行される。

Linux上のCLIでClaude Code v2.1.220 で試しました。当然、Hooksの機能の仕様通りに実行されます。
ステップ2で中身を確認して気づくべきですが、"setup"という名前につられて中身の確認が不十分になったりすると...危ないですね。

Codexはもう少し堅牢です。 Codexの場合、.codex/レイヤーをTrustしただけではhookは動きません。ユーザーが /hooks でhookの中身をレビューし、明示的に許可しない限り実行されない設計です。しかもhookの中身が変化すると再レビューが走り、承認し直すまではスキップされます6

仰々しく当たり前のことを言ってどうしたの?

このPoCは、脆弱性ではなく仕様通りの動作です。

CIやGit hooksを日常的に触ってきたインフラ/プラットフォーム層のエンジニアにとっては「せやな」以外の感想はない話ですよね。ですが、「せやな」にならない層に、Hooksを含むAIエージェントのビッグウェーブがきている気がしており、改めてこういう仕組みだよ、というのを言っておく価値はあるかなと感じてます。

  • 昔からある.git/hooksなどは、そもそもcloneで共有されない7。「hookは共有しない」のがデフォルト。共有したければ何かしらの手段であえて共有する必要がある。
  • 一方で、AIエージェントのhook.claude/settings.json.codex/hooks.json)は、リポジトリ内の普通のファイルとして、普通に共有される
  • そこへ 僕が考えた最強のAGENTS.mdを共有するブームがあり、「エージェント設定を丸ごとcloneして自分のPCでAIに食わせる」ことが、レビューも機械的なチェックもなしに行われがちに。

では、どうすればいいのか

ご利用の環境によって対策は変わりますが、概ね以下のような対策は行うべきかなと思います。

共通:仮想環境で動かす

AIエージェントは、コンテナやVMなど、ホストから隔離された環境で動かしましょう。Hookの実行を見落としても、被害を限定できます。「ちょっと見るだけ」だとしても、VSCodeのDevcontainerを使うのを習慣化するのがいいでしょう。

コンテナやVMは被害範囲を限定する手段ですが、隔離が自動的に保証されるわけではありません。ホストのファイルマウント、Dockerソケット、SSH Agent、クラウド認証情報、ネットワークアクセスを最小化してください。

エンタープライズ環境:組織設定で強制する

対応製品では、グローバルなManaged設定により、組織が管理するHookだけを許可できます。あわせて、Allowlistによるコマンド制限やサンドボックスを強制し、利用者の注意力だけに依存しない運用にします。具体的な対応範囲と設定方法は、各製品の公式リファレンスを参照してください。89

個人環境:信頼する前に目視する

AIエージェントを起動する前に、任意コマンドの実行につながり得る設定を確認します。
使ってるツール次第ですが、こんなところでしょうか👇(ご利用のツールの仕様を確認してください)

.claude/settings.json
.mcp.json
.cursor/mcp.json
.cursor/cli.json
.codex/config.toml
.codex/hooks.json
.gemini/settings.json
.vscode/tasks.json

設定から呼び出されるスクリプトも確認し、git pull後は差分を見直しましょう。AGENTS.mdCLAUDE.mdなどの指示ファイルも確認対象です。

おわりに

「このリポジトリを信頼する」という操作は、単なる警告の解除ではありません。リポジトリに含まれる設定、Hook、MCPサーバーなどに、自分の権限で動作する機会を与える行為です。

個人では、信頼前の目視確認と仮想環境による隔離を徹底する。組織では、それに加えてManaged設定、Allowlist、サンドボックス、監査ログを強制し、人間の注意力だけに依存しない。この二段構えが、仕様として残る「信頼後実行」への現実的な対策になります。

  1. Check Point Research「Cursor Vulnerability MCPoison / CVE-2025-54136」 https://research.checkpoint.com/2025/cursor-vulnerability-mcpoison

  2. https://nvd.nist.gov/vuln/detail/CVE-2025-54135

  3. https://pasqualepillitteri.it/en/news/2744/claude-code-rce-deeplink-vulnerability-2-1-118

  4. Canyon Road「A Year of AI Tool Exploits」(CVE/GHSA一覧) https://www.canyonroad.ai/blog/a-year-of-ai-tool-exploits-one-root-cause

  5. Adversa.AI「TrustFall」(2026-05-07) https://adversa.ai/blog/trustfall-coding-agent-security-flaw-rce-claude-cursor-gemini-cli-copilot

  6. Codex公式「Hooks」ドキュメント(trust-review仕様・hash承認・再レビュー) https://learn.chatgpt.com/docs/hooks

  7. Git公式「Customizing Git - Git Hooks」(.git/hooksはcloneで共有されない) https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

  8. https://docs.anthropic.com/en/docs/claude-code/hooks

  9. https://learn.chatgpt.com/docs/hooks

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?