本文へスキップ

Gitのpost-checkoutフックを悪用するマルウェア、開発者を標的に

開発者のFrank Wiles氏は、偽の顧客から届いたリポジトリーに、ブランチの切り替え時にマルウェアを取得するgit(ギット)のpost-checkoutフックが仕込まれていたと明かしました。求職者も同じ手口に狙われています。

著者 Tech AI Wire Team

4 分で読めます

FrankWiles.comに掲載された、Frank Wiles氏の「I got targeted」という見出しのブログ記事のスクリーンショット。

開発者のFrank Wiles氏は2026年10月2日、攻撃者が罠を仕掛けたgitリポジトリーで自分のアカウントを乗っ取ろうとしたと書きました。罠はpost-checkoutフックでした。ブランチを切り替えるたびにgitが実行するスクリプトです。これは、少なくとも5月から求職者を狙ってきた一連の攻撃の、最新の事例です。開発者にとっての教訓は、他人のリポジトリーでブランチをチェックアウトするだけで、その人のコードが実行されうるということです。

Frank Wiles氏に起きたこと

Wiles氏が自身のブログに書いたところによると、攻撃者は開発会社のオーナーを装っていました。攻撃者は同氏にNDA(秘密保持契約)の確認を依頼し、Dropbox経由でリポジトリーを共有しました。そして、「NDAブランチ」に切り替えるよう求めました。

このブランチの切り替えが引き金でした。リポジトリーの.git/hooks/フォルダーには、post-checkoutフックが置かれていました。Wiles氏がブランチを変えると、フックはVercel上のサーバーから、同氏のOS向けに作られたプログラムをダウンロードしました。そして、そのファイルを実行可能にして実行し、その後で自らを削除しました。

Wiles氏は、目的は「私のGithubアカウントや、REVSYSの顧客に関連するその他のアクセス権の取得」だったとみています。同氏は、post-checkoutフックはめったに使われないため、見落としやすいと指摘しています。ほかの開発者へのアドバイスは、「いつも以上に警戒し、認証情報を鷹のように見張る」ことです。

gitフックが武器になる仕組み

gitフックは、コミットの前やチェックアウトの後など、決まったタイミングでgitが自動的に実行する小さなスクリプトです。リンターの実行などの作業に使われる、ごく普通の機能です。サーバーからの通常のgit cloneでは、フックはコピーされません。そのため、攻撃者たちは別の経路を使います。

報告からは、2つの経路が見えてきます。

  • フォルダーごと送る。 Wiles氏は、Dropbox経由でリポジトリーを受け取りました。Andrii氏が5月のブログ記事で分析した事例では、標的はGoogle Driveで「デモ用のコードベース」を受け取りました。共有フォルダーやアーカイブには、隠しディレクトリーの.gitが、フックごと含まれることがあります。
  • 被害者にフックを有効にさせる。 OpenSourceMalwareは、フックを.githooksフォルダーに置いたリポジトリーについて説明しています。被害者は中身を読まずに、git config core.hooksPath .githooksでフックを有効にしてしまったようです。

いずれの場合も、フックは普段の作業中に実行されます。Andrii氏が分析した事例では、メインのコードを表示するためのコマンドgit checkout devで起動しました。

マルウェアが盗むもの

ペイロードはさまざまですが、狙うものは同じです。Andrii氏の分析では、id_ed25519などのSSH鍵、.envファイル、暗号資産のウォレット、証明書を探すプログラムが見つかりました。このプログラムはDesktop、Documents、Downloadsの各フォルダーをスキャンし、10MB未満のファイルをアップロードしていました。さらに、クリップボードの内容を1秒ごとに送信し、攻撃者がそのマシンでコマンドを実行できるようにしていました。

7月にCitizen Dotのブログに掲載された記事は、偽の求人の裏にある同様の罠について説明しています。LinkedInの「リクルーター」が、「月10,000~15,000ドル」のリモート契約を持ちかけました。持ち帰り課題のプロジェクトはGoogle Drive上のzipファイルで届き、暗号資産ウォレットを盗むプログラムをダウンロードするgitフックが含まれていました。

背後にいるのは誰か

OpenSourceMalwareは、この攻撃を北朝鮮のハッカー集団であるLazarus Groupと結びつけています。同社は、gitフックを使う手口を、偽の就職面接を使う「Contagious Interview」キャンペーンと関連づけています。このキャンペーンは主に、暗号資産やweb3の分野の人々を標的にしています。同社が調べた事例では、マルウェアは「候補者が初めてバグを修正してコミットしようとしたとき」に実行されました。同社はpost-checkoutフックを「さらに悪質な」変種と呼んでいます。単にブランチを変えるだけで起動するからです。

Wiles氏が説明した事例では、求人ではなく、偽の顧客とNDAが使われました。サーバーからペイロードをダウンロードする隠しフックという手法は同じです。

開発者にとっての意味

フォルダーやアーカイブとして受け取ったリポジトリーを、自分のマシンで開いてはいけません。代わりにgitホスティングサービスから新たにクローンするか、使い捨ての仮想マシンやコンテナの中で開いてください。新しくクローンすれば、送り主のフックは持ち込まれません。

共有されたコードでgitコマンドを実行する前に、.git/hooks/の中に.sampleで終わらないファイルがないか確認してください。.git/configにhooksPathの設定がないか調べ、.githooksフォルダーも探しましょう。Citizen Dotの筆者は、信頼できないコードに触れる前に、.gitや.vscodeのような隠しフォルダーを調べるよう勧めています。

1つのコマンドに限って、フックを無効にすることもできます。git -c core.hooksPath=/dev/null checkout <branch>を実行すると、gitは空の場所を参照するため、フックは1つも実行されません。

gitの設定を変えるよう求められたら、危険信号と考えてください。本物の顧客や雇用主が、自分たちのフックを有効にするよう求める理由はありません。フックがすでに実行されたと思うなら、SSH鍵、トークン、.envの秘密情報が漏れたものとみなしてください。クリーンなマシンからそれらをローテーションし、GitHubアカウントに新しい鍵やセッションが追加されていないか確認してください。

出典

  1. I got targeted: Trying to get your credentials via a git post-checkout hook - Frank Wiles
  2. Be careful with your Git: Investigating malware spreading through Git repositories - andrii.ro
  3. Lazarus Group Uses Git Hooks To Hide Malware - OpenSourceMalware
  4. I Inspected My Take-Home Interview Project. It Was a Trap - Citizen Dot

関連記事

Scott Chacon氏によるGitButlerブログ記事「Git 3.0's upcoming SHA-256 default will be a costly mistake」のスクリーンショット。カラフルなヘッダーイラストが添えられています。
開発ツール

Git 3.0のSHA-256既定は『高くつく誤り』とChacon氏

Scott Chacon氏は、Git 3.0のSHA-256(シャー256)既定はどのリポジトリも直面していない問題を解くだけで、40文字のハッシュをあらゆる場所で壊すと述べています。Gitは公開日を定めていません。

GitHub Changelogの記事「Opt-in dist-tag permissions for npm trusted publishing」のスクリーンショット。下にGitHubの青いOctocatのアートワークがある。
開発ツール

npmのtrusted publishing、OIDCでdist-tagの移動に対応

npmのtrusted publishingで、短期間だけ有効なOIDCトークンを使い、latestなどのdist-tag(ディストタグ)を追加、移動、削除できるようになりました。初期設定ではオフで、npm 11.21.0が必要です。