HN 日本語サマリー

← 一覧へ戻る
セキュリティ

GitSpawn: 信頼できないリポジトリがAIコーディングエージェント経由でコードを実行可能

GitSpawn: Untrusted repos can execute code via AI coding agents (manifold.security)

4 pointsby fourfire1 コメント

要約

AIコーディングエージェントがコンテキスト収集のためにバックグラウンドでgitコマンドを実行する際、不適切なサニタイズ処理により、信頼できないリポジトリから任意のコード実行が可能になる脆弱性「GitSpawn」が発見されました。この脆弱性は複数の主要なAIコーディングエージェントに影響を与え、開発者の権限でサンドボックス外でコードが実行される危険性があります。

全文翻訳

HomeBlogコーディングエージェントがGitコールにより乗っ取られる RESEARCHGitSpawn: 単一の欠陥で信頼できないリポジトリがClaude Code, Codex, Cursor, Grokでコードを実行可能2026年9月1日8分Francisco RosalesOffensive Security EngineerRESEARCHGitSpawn: 単一の欠陥で信頼できないリポジトリがClaude Code, Codex, Cursor, Grokでコードを実行可能2026年9月1日8分Francisco RosalesOffensive Security EngineerRESEARCHGitSpawn: 単一の欠陥で信頼できないリポジトリがClaude Code, Codex, Cursor, Grokでコードを実行可能2026年9月1日8分Francisco Rosales8件の発見が7つのエージェントにまたがっています。公開時点で4件は未修正です。更新、2026年9月1日。OpenAIのCodexとCursorも影響を受けました。両方ともテストし報告しましたが、それぞれ別の研究者が既に提出したレポートの重複として返却され、その後両方とも修正されました。Codexのバリアントはメカニズムがいくらか異なりますが、同じクラスに属します。どちらも以下に個別に記載されていません。ケーススタディでは、完全なチェーンを自身で示すことができ、開示記録に文書化する価値がある発見をカバーしています。フォルダをClaude Codeで開くと、何か入力する前に`git status`が実行されます。ワークスペースの信頼プロンプトの前です。一部のエージェントでは、認証する前でさえもです。そのフォルダがどこか別の場所から来た場合、リポジトリがそのコマンドを実行するものを決定します。TL;DRこれは何ですか。AIコーディングエージェントは、コンテキストを収集するためにバックグラウンドでgitコマンドを実行します。一部のエージェントでは、プロンプトを入力する前、ワークスペースの信頼プロンプトの前、認証する前でさえもです。このコンテキスト収集メカニズムにおける不適切なサニタイズ処理は、AIコーディングエージェント製品全体にわたる広範なセキュリティ脆弱性であり、それぞれが任意のコード実行につながります。攻撃者が得るもの。開発者として、サンドボックスの外で、承認プロンプトなし、画面上の何もなしで、任意のコード実行。彼らのSSHキー、環境内のクラウド認証情報、シェル設定内のトークン、ディスク上のすべてのリポジトリ、そしてマシン上の足がかり。どのくらい広範か。単一ベンダーのバグではありません。Claude Codeは毎月7700万npmダウンロード(npm APIより)を配信しています。5つのプロジェクト全体で、Hermesは237,000以上のGitHubスター、Claude Codeは143,000以上、Gooseは54,000以上、Qwen Codeは27,000以上、Grok Buildは26,000で、合計で50万近くになります。未修正での公開について。8件の発見のうち4件はまだライブです。すべてプライベートに報告され、公開前に現在のリリースで再確認され、ベンダーによって認識されたか、返信なしで複数のチャネルで追跡されました。私たちの報告の5件は、他の研究者が既に独立して提出した発見の重複として返却されました。そのうちの1件は私たちのものと同じ日に提出されました。これは複数の方向から発見されています。一つの質問この研究は単一の質問から始まりました。CLI AIエージェントは起動時に実際に何をするのか?舞台裏で何が起こっているのか?いくつかのAIエージェントを調べたところ、同じ動作を観察しました。それらは、開かれたばかりのプロジェクトのコンテキストを収集します。その収集の大部分はgitで行われ、さまざまな目的でさまざまな瞬間に呼び出されます。一部は起動時、一部はセッションが開始されると呼び出されます。gitの使用方法を見ると、脆弱なパターンが見つかりました。これらのコンテキスト収集呼び出しは、リポジトリ自体のgit設定を削除せずに実行され、いくつかのgit設定はコマンド実行シンクです。リポジトリはコマンドを名前付けし、gitはそれをホスト上で、ユーザーの権限で、承認プロンプトの前に実行します。この投稿では、そのうちのいくつか、Claude Code, Goose, Grok Build, Hermes, Qwen Codeのみをカバーしています。ここで名前を挙げた以上のエージェントでも発見しました。あなたが実行しなかったgitエージェントがgitに要求するものは、それが何をしようとしているかによります。現在のブランチ、変更されたファイルやステージングされたファイルを知りたいかもしれません。変更が触れたファイル、またはリポジトリが追跡するすべてのパス、あるいはサブエージェントが作業するために新しいワークツリーを知りたいかもしれません。多くの例のうちの2つ、異なる製品から:git status --porcelain=2 --branchgit diff --name-only HEADどちらも異常ではありません。どちらも自分で書くようなコマンドです。そしてどちらも、ワーキングツリーに触れるほとんどのgitコマンドと同様に、gitにインデックスをリフレッシュさせます。そのリフレッシュがシンクです。core.fsmonitorは大規模なリポジトリのパフォーマンス設定です。ディスク上のすべてのファイルをチェックする代わりに、gitはヘルパープログラムに何が変更されたかを尋ね、インデックスのリフレッシュ中にそれを実行します。文書化された、意図された動作です。gitはその設定をリポジトリ自身の.git/configから読み取ります。したがって、リポジトリはこれを配信できます:[core] fsmonitor = <command>そしてインデックスをリフレッシュするgitコマンド(git status, git diffなど)はそれを実行します。エージェントが選択したコマンドは関係ありません。そしてcore.fsmonitorだけがそのような設定ではありません。そのため、以下の発見の1つはまったくcore.fsmonitorのバグではありません。配信は正確さを期す価値があります。なぜなら、gitはこれを決して運びません。悪意のあるURLをクローンしても何も起こりませんし、fetchやpullも同様です。リポジトリは、その.gitディレクトリが既に内部にあるファイルとして到着する必要があります。したがって、ベクトルはディレクトリをクローンせずに移動するあらゆるものです。共有.zip、共有ドライブ、同期フォルダ、USBスティックです。同僚はプロジェクトをこのようにやり取りし、コンサルタントはクライアントに渡します。この投稿のすべてのプルーフオブコンセプトで、.zipを使用しました。そこから、コマンドはあなたとして、あなたの権限で、あなたのマシン上で実行されます。これはエージェント自身のコードがgitを使用するためにサブプロセスを起動するため、コマンドはサンドボックスの外で、承認プロンプトなしで実行されます。権限モデルはそれを決して認識しません。私たちはこれをGitSpawnと呼びます。以下は、さまざまなCLI AIエージェントで見つかったものの例です。エージェントが実行時に実際に何をするか見てみたいですか?Manifoldに話しかけてください。エージェントごとの同じ間違いGooseシンク。gooseはレビューのためにリポジトリ内でgit diffを実行してdiffを構築しました。gitに1つの設定フラグ、core.quotePath=offを渡しましたが、何も削除しませんでした。インデックスがリフレッシュされ、リポジトリのcore.fsmonitorコマンドが、gooseがモデルに連絡する前に実行されました。トリガー。ユーザーが作業中の変更のコードレビューを取得するためにgoose reviewを実行し、diffを収集している間にペイロードが実行されました。影響を受けた1.41.0(7月13日報告)、1.44.0で修正済み。CVE-2026-72718、メンテナーによって7.0(重大度)と採点され、私たちの報告後に割り当てられました。Claude Code - core.fsmonitorシンク。Claude Codeは、サンドボックス外の内部サブプロセスとしてgit statusを実行して、起動時にリポジトリコンテキストを収集しました。リポジトリの設定から何も削除しませんでした。インデックスがリフレッシュされ、リポジトリのcore.fsmonitorコマンドが、ワークスペースの信頼プロンプトが承認される前にホスト上で実行されました。トリガー。ユーザーがclaudeでプロジェクトフォルダを開き、エージェントがコンテキストを収集している間にペイロードが実行されました。2.1.193で確認済み、2.1.196で修正済み。2026年6月26日報告、同日より前に提出されたレポートの重複としてクローズされました。Claude Code - ultrareviewシンク。これはcore.fsmonitorではありません。これは、レビューパスが削除しない、同じ種類の別のgit設定です。悪意のあるコマンドは、ワークスペースの信頼プロンプトが表示される前または承認される前でさえも、起動時に実行されます。トリガー。ユーザーがリポジトリのレビューを取得するためにclaude ultrareviewを実行し、レビューが開始される前にペイロードが実行されます。2.1.210で2026年7月15日に報告され、内部チケットの重複としてクローズされました。9月1日時点の2.1.252で未修正であることを確認しました。Hermes Agentシンク。Hermesはセッションディレクトリでgit statusを実行してリポジトリコンテキストを収集します。リポジトリの設定をそのまま渡します。インデックスがリフレッシュされ、リポジトリのcore.fsmonitorコマンドがホスト上で実行されます。トリガー。ユーザーがHermesでリポジトリを開き、最初のメッセージを送信すると、Hermesがコンテキストを収集する際にペイロードが実行されます。2026年7月19日に0.18.2で確認済み、翌日報告、そして2026年9月1日に0.21.0で再度確認済み。5つのチャネルにわたる6回の連絡試行、プライベートGHSAアドバイザリは一度もトリアージされませんでした。CVE-2026-71963、独立したCVE番号割り当て機関であるVulnCheckによって割り当てられ、ベンダーではありません。未修正です。Qwen Codeシンク。Qwen Codeは、