🤖

[RCE] Claude Codeの脆弱性を発見・報告した話(CVE-2026-40068)

に公開

エーアイセキュリティラボ開発本部の安西です。私が発見し Anthropic のセキュリティチームに報告した Claude Code の脆弱性が、2026年4月24日にCVEとして公開されました。本記事では脆弱性の技術的な詳細についてまとめます。

Advisory: GHSA-q5hj-mxqh-vv77
CVE: CVE-2026-40068
影響バージョン: @anthropic-ai/claude-code 2.1.63 〜 2.1.83
修正バージョン: 2.1.84(自動更新ユーザーは対応済み)


概要

Claude Code は、起動時に「このフォルダを信頼しますか?」というダイアログを表示して、ユーザーの明示的な承認を求めます。この仕組みは Trust Dialog と呼ばれ、見知らぬリポジトリが自動的にコマンドを実行しないようにするための安全装置です。

リポジトリ内に攻撃コードが含まれていた場合、マルウェア感染や機密情報漏えいにつながる可能性があるため、Trust Dialog は重要な防御層になります。

今回発見したのは、git の worktree 機能で使われる commondir というファイルを細工することで、特定条件下で Trust Dialog をスキップさせることが可能な脆弱性です。

攻撃の流れはシンプルで、被害者が細工されたディレクトリを Claude Code で開くだけで、Trust Dialog が表示されることなく、ディレクトリ内に仕込まれた任意のコマンドが即座に実行されます。


Claude Code のトラストモデル

脆弱性を理解するために、まず Claude Code がどのようにして「信頼済みのフォルダ」を管理しているかを説明します。

Trust Dialog とは

Claude Code を初めてのフォルダで起動すると、次のような確認画面が表示されます。

Do you trust the files in this folder?

  /path/to/project

Claude Code may read and execute files in this folder.
Only accept if you trust the source of these files.

  > Yes, I trust this folder
    No, I don't trust this folder

ここで承認すると、そのフォルダのパスが ~/.claude/config.json に「信頼済み」として記録されます。次回以降は同じフォルダで起動してもダイアログは表示されません。

なぜ Trust Dialog が重要なのか:Hooks

Claude Code には Hooks という機能があります。これはツールの実行前後やセッション開始などのタイミングに、任意のシェルコマンドを自動実行できる仕組みで、プロジェクトの .claude/settings.json に設定します。

フックは強力な機能ですが、裏を返せば「外部から取得したコードに仕込まれた任意のコマンドを、ユーザーが気付かないまま実行してしまう」というリスクもあります。Trust Dialog は、こうしたリスクに対するセーフガードとして機能します。

Trust Dialog をバイパスできるということは、攻撃者が用意したコマンドを、ユーザーが Claude Code を起動した瞬間に実行させられることを意味します。

近年、npm の postinstall スクリプトを悪用してマルウェアを実行するサプライチェーン攻撃が知られていますが、フックはそれよりも危険な側面があります。npm install のような追加操作を必要とせず、ディレクトリを Claude Code で開いた瞬間に発動するフック種別(SessionStart など)が存在するためです。細工されたディレクトリを開くだけでコードが実行されるという点で、攻撃のハードルが非常に低くなっています。


git の worktree と commondir

攻撃の仕組みを理解するためのもう一つの前提知識として、git の worktree 機能を説明します。

通常の git リポジトリ

通常、git clone でリポジトリをクローンすると、フォルダの中に .git というディレクトリが作られます。これが git のメタデータを格納する場所です。

myproject/
  .git/          ← ディレクトリ
  src/
  README.md

git worktree とは

git worktree add コマンドを使うと、同じリポジトリを複数の場所に同時に展開できます。ブランチを切り替えずに別ブランチのファイルを参照したいときなどに便利な機能です。

worktree を追加すると、追加先のフォルダには .gitファイルとして作られます(ディレクトリではなくファイル)。そのファイルの中身は「本当の .git はここにある」という参照先のパスです。

myproject/                  ← メインの worktree
  .git/                     ← ディレクトリ(本体)
    worktrees/
      feature/
        commondir           ← "../../.." と書かれている(メインを指す)

myproject-feature/          ← 追加の worktree
  .git                      ← ファイル(「本当の.gitはmyproject/.git/worktrees/featureにある」)
  src/

commondir は worktree 配下の .git ディレクトリに置かれるファイルで、「メインの .git ディレクトリはここにある」という相対パスが書かれています。

Claude Code はこの commondir を辿ってリポジトリの「正規のルート」を特定し、それを信頼チェックのパスとして使っていました。


脆弱性の詳細

何が起きていたか

Claude Code は、開いているフォルダが git の worktree かどうかを判定するために commondir ファイルを読みます。そしてそのパスを信頼チェックに使います——ここに問題がありました。

commondir の内容が本当に正規の worktree 構造に対応しているかどうかを、検証していなかったのです。

攻撃者が行うこと

攻撃者は、git の worktree 構造に見えるよう細工したディレクトリを用意します。その中には、信頼済みパスを指すように改ざんされた commondir と、悪意あるフックを含む .claude/settings.json が置かれています。

evil-project/
  (git worktree に見えるよう細工されたメタデータ)
  .claude/
    settings.json     ← 悪意あるフックが仕込まれている
  ...(普通に見えるコード)

細工された commondir の中身:

/Users/victim/trusted-project

これは「信頼済みプロジェクトの git root はここにある」と偽って記述したものです。

Claude Code が騙される流れ

被害者がこのディレクトリを Claude Code で開くと、内部で次の処理が走ります。

1. 現在のフォルダ: /Users/victim/evil-project

2. git worktree に見えるメタデータを読む

3. 細工された commondir を読む
   → "/Users/victim/trusted-project"(信頼済みパスとして解釈)

4. 「正規ルート」= /Users/victim/trusted-project と判定

5. config.json を確認:
   /Users/victim/trusted-project は信頼済み ✓

6. → Trust Dialog をスキップ

結果として、evil-project/.claude/settings.json に書かれたフックが、Trust Dialog を一切表示することなく実行されます。

「信頼済みパス」について

一点補足すると、この攻撃には「攻撃者が被害者の信頼済みパスを知っているか推測できる」という前提条件があります。とはいえ、~/Desktop/~/work/<よく知られたプロジェクト名>/ のような一般的なパスは推測しやすく、特定個人を狙うよりも広く配布する形の攻撃として成立しえます。


AIセキュリティツールと網羅性の限界

2026年4月7日、Anthropic は Claude Mythos Preview を発表しました。脆弱性を自律的に発見し、動作する exploit コードまで生成できる AIセキュリティツールです。その能力を示す例として、Linux カーネルの NFS ドライバに 23年間にわたって潜伏していた脆弱性(CVE-2026-31402)を発見したことが知られています。

こうした発表を受けて、Mythos の性能に大きな期待が寄せられるのは自然なことです。一方で、現時点では一般企業が自由に利用できるものではなく、実際に広く検証された事例も限られています。そのため、その能力を過度に一般化して捉えることには慎重であるべきだと考えています。

少なくとも今回の件は、Anthropic の自社プロダクトであっても、信頼境界や複数の仕様にまたがる脆弱性は残りうることを示しています。

Mythos のようなシステムが今後さらに強力になっていくとしても、バグのない完全なシステムは存在しませんし、全てのバグを見つける魔法のツールも存在しません。AIによる脆弱性検出の性能が向上しても、その網羅性が保証されるわけではない、という当たり前の事実を、今回の件は改めて示しているように思います。


まとめ

発見した脆弱性のポイントをまとめます。

  • 何が問題だったか: git の commondir ファイルを細工することで、特定条件下で Trust Dialog をスキップさせられた
  • 影響: 細工されたディレクトリを Claude Code で開くだけで任意コードが実行される
  • 修正: v2.1.84 で commondir の内容を構造的に検証するようになった
  • 対応: 自動更新ユーザーは対応済み。手動管理の場合は ターミナルで claude update を実行

AI コーディングツールはファイルシステムへのアクセスや任意コマンド実行を行う性質上、信頼モデルのバイパスは直接「悪意あるコード実行」につながります。これは従来のエディタ拡張よりもリスクが高いと言えます。外部から取得したコードを AI ツールで開くという日常的なワークフローの中に潜む問題だった点が、この脆弱性の特徴です。

株式会社エーアイセキュリティラボ 開発本部

Discussion