Osegi
セキュリティ·2 分で読めます

偽の求人ZIPはgit statusだけでマルウェアを実行する

Cryptic Heavenを名乗る採用担当者が、細工した.gitフォルダ入りのZIPを開発者に送った。普通のgit statusでも、隠れたコードのダウンロードが起こりうる。

A developer's laptop screen showing a terminal running git status next to a ZIP archive named Contract-2026.zip.
画像: Хабр

LinkedInで届いた求人の話が、思わぬ罠につながった。Cryptic Heavenという会社の採用担当者を名乗る人物が、ある開発者にContract-2026.zipを送ってきたのだ。中には細工された.gitフォルダが入っていた。install.shの実行やビルドは不要で、条件次第ではgit statusだけで発動する。

担当者は、暗号資産クレジットカード利用者向けの金融システムを開発していると説明した。開発者がプロジェクトや条件を尋ねると、契約書、職務記述書、プロジェクトへのリンクが届き、氏名を記入した契約書を返送するよう求められた。ZIPにはREADME.md、contract.docx、履歴や複数のブランチを含む.gitディレクトリが入っていた。READMEは求人、契約書、コードの順にブランチを見るよう促していた。契約書は空欄だらけのひな形で、法人名も報酬も管轄も書かれていなかった。

git statusでマルウェアが動く仕組みは?

Gitには外部プログラムを呼び出せる仕組みがある。ひとつはフック。通常は.git/hooksにあるが、core.hooksPathで場所を変えられる。今回は誰も開かないフォルダを指しており、ブランチ切り替え後に自動で走るpost-checkoutが置かれていた。

もうひとつが.git/configのフィルターだ。ltrという名前のcleanフィルターが.git/ltrを実行する設定で、attributesのアスタリスクですべてのファイルに適用される。git statusはファイルが変更されたか調べるためcleanフィルターを通すことがあり、普通のコマンドで外部プログラムが動く。筆者は安全なテスト用リポジトリで、フィルターを呼び出しを記録するだけのスクリプトに替えて確認した。git statusはフィルターを呼び、ブランチ切り替えはpost-checkoutも呼んだ。

.git/ltrは何をするのか

これはシェルスクリプトだ。Gitはファイルごとにフィルターを何度も呼ぶため、最後の呼び出し時刻を記録し、2秒間呼ばれなくなるまで待つ。mkdirによるロックで監視の多重起動も防ぐ。その後OSを判別して遠隔サーバーからコードを取得し、すぐ実行する。Linux/macOSはsh、WindowsはPowerShellだ。サーバーはvercelscript.vercel.appのサブドメインにあった。処理は背景で動き、出力は/dev/nullに捨てられるので、利用者は気づかない可能性がある。

ダウンロードされるスクリプトの中身は、ZIPだけでは分からない。次の段階の攻撃や情報窃取の可能性がある。

注目のアプリ

SUMO:数字パズル

正しいマスを選んで足し算、目標の数に。覚えるのは簡単、極めるのは難しい。無料、全年齢向け。

Dialo:話して学ぶ語学アプリ

AIの会話パートナーと話すだけ。一文ごとに添削され、あなたの言語で解説が返ってきます。9言語、A1からC2まで。

タグ:gitmalwarelinkedinjob scamcryptic heavendeveloper security

同じ日のニュース

すべて見る →

関連カテゴリ: セキュリティ

すべて見る →