AIコードアシスタントは、Gitのcore.fsmonitor機能を悪用する悪意のある.git/configエントリによって乗っ取られる可能性があります。これにより、信頼できないリポジトリが、アシスタントがファイルをスキャンした瞬間に開発者のマシン上でコマンドを実行できてしまいます。

この欠陥は、Claude Code、Cursor、OpenAI Codex、Goose、Qwen Code、Grok Build、Hermesといった複数の人気のあるエージェントで明らかになりました。パッチが適用されたエージェントではこのエクスプロイトは機能しませんが、それ以外は依然として脆弱なままです。追加のクリックやプロンプトは必要なく、悪意のあるコードは、AIエージェントが提供するいかなるサンドボックスの外でも、ユーザー自身の権限で実行されます。

攻撃がどのように開発者に到達するか

  • 契約者がプロジェクトをzip圧縮してメールで送る。
  • チームメイトがネットワークドライブ上のフォルダを共有する。
  • USBメモリでコードベースが渡される。

各ケースにおいて、リポジトリはすでに.gitフォルダを含むディレクトリとして届きます。AIアシスタントがフォルダを開くと、通常、コードの全体像を把握するためにバックグラウンドでgit statusを実行します。Gitはcore.fsmonitor設定を使用してこの操作を高速化しますが、これはファイルシステムの変更を監視するために外部プログラムを呼び出すようGitに指示するものです。リポジトリの.git/configファイルにcore.fsmonitor用の悪意のあるコマンドが定義されている場合、Gitはユーザーに確認することなく自動的にそれを実行します。

コマンドはGit自体によって起動されるため、ユーザーの権限を継承し、AIツールが設定したサンドボックスをバイパスします。このエクスプロイトは、通常のgit clonegit fetch、またはgit pull中には発生しません。リポジトリが、.gitメタデータがすでに存在する状態で展開されたときにのみアクティブになります。

なぜこの問題が重要なのか

開発者は、コード補完の提案、リファクタリング、あるいはモジュール全体の生成をAIアシスタントに頼ることが増えています。これらのツールはプロジェクトのファイルツリーの素早いスナップショットを必要とするため、Gitコマンドをサイレントに呼び出します。もし悪意のあるリポジトリがその瞬間にコードを実行できれば、攻撃者は目に見える警告なしに開発者のワークステーションへの足がかりを得てしまいます。潜在的なペイロードは、認証情報の窃取から永続的なバックドアの設置まで多岐にわたりますが、その間、ユーザーは単にAIヘルパーを使ってコードを「確認」しているだけだと思い込んでいます。

汚染されたリポジトリの検出

アシスタントにリポジトリを渡す前に、以下を実行してください:

git config --get core.fsmonitor

出力が空でない場合は、プログラムが自動的に実行されるように設定されています。より広範囲に調査するには、不審なGit設定をリストアップします:

git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'

自身で追加した覚えのないエントリを見つけた場合は、以下で削除してください:

git config --local --unset core.fsmonitor

git config --global core.fsmonitor false を設定しても、保護にはなりませんので注意してください。ローカルリポジトリの設定は常にグローバル設定を上書きするため、悪意のあるリポジトリは単にグローバルなルールを無視することができます。

現在のパッチ状況

  • Claude Code – パッチ適用済み (fsmonitor)
  • Cursor – パッチ適用済み
  • OpenAI Codex – パッチ適用済み
  • Goose – パッチ適用済み
  • Qwen Code – 未修正
  • Grok Build – 未修正
  • Hermes – 未修正

未修正のエージェントを使用している開発者は、ツールを切り替えるか、より厳格なローカルGitポリシーを適用するまで、送られてくるリポジトリをすべて潜在的に危険なものとして扱うべきです。

Gitコミュニティからの反論

Gitのcore.fsmonitorは正当なパフォーマンス機能であり、バグではありません。メンテナーは、Gitコマンドを呼び出す前にリポジトリの内容を検証する責任は呼び出し側にあると主張しています。この機能をグローバルに無効化することは単純な緩和策ですが、前述の通り、ローカルでの上書きによってその保護が無効化される可能性があります。現在、より広範な議論は、AIアシスタントがすべての外部Git呼び出しをサンドボックス化すべきか、あるいはカスタムのfsmonitorフックを含むリポジトリの処理を拒否すべきかという点に集中しています。

今後の注目点

  • 未修正のAIエージェントからのアップデート(特にGit呼び出しのサンドボックス化に関する声明)。
  • 信頼できないディレクトリに対するGitのcore.fsmonitorのデフォルトの扱いにおける潜在的な変更。
  • アシスタントに届く前にリポジトリの.git/configをクリーンアップできるサードパーティツール。

まとめ

隠し設定ファイル内のたった一行が、AIによる利便性をリモートコード実行(RCE)のベクトルに変えてしまう可能性があります。脆弱なエージェントが修正されるまでは、標準的なクローンワークフロー以外で届いたすべてのリポジトリを監査し、AIアシスタントにコードを触らせる前にcore.fsmonitorや同様のフックを削除することが最も安全な習慣です。