🌐 This article hasn't been translated yet — showing the Japanese version.
LinkedIn 偽求人が送る「バックドア入り GitHub リポジトリ」 — npm install で詰む現実 thumbnail

LinkedIn 偽求人が送る「バックドア入り GitHub リポジトリ」 — npm install で詰む現実

Importance: Medium
⏱ approx. 2 min views 5 likes 0 LOG_DATE:2026-06-16
TOC

攻撃の経緯 #

フルスタックエンジニアの Roman Imankulov 氏は、LinkedIn で「仮想通貨スタートアップの採用担当」を名乗る人物から声をかけられた。技術面接の代わりに渡されたのは GitHub の「コード課題」リポジトリ。指示は妙に細かく、npm ではなく pnpm でインストールしろ」 と書かれていた。

リポジトリには第三者のコミット履歴がきれいに残っていたが、後にその開発者に問い合わせると 「自分のリポジトリが乗っ取られた」 との回答。攻撃者は他人の正規プロジェクトを丸ごと改ざんし、被害者を求人で釣る運用を回している。

1. LinkedIn で接触
採用担当を装い、実在ジャーナリストのプロフィール写真を流用して信頼を稼ぐ。
2. 課題リポジトリ提示
乗っ取られた他人の正規リポジトリで、コミット履歴が「本物」に見える。
3. install 時に発火
スクリプトフック経由で外部サーバから任意コードを取得し実行する。

なぜ気付きにくいのか #

バックドアは package.json のスクリプトフックに置かれており、人間が pnpm install を打った瞬間にビーコンが鳴る 設計。コードレビューで依存ツリーを追っても、ペイロードは「インストール時に取りに行く外部 URL」の側にある。pnpm 指定は開発者の趣味に見えるが、両者とも install hook の既定挙動は同じで、安全側に倒れない選択を相手に強制している点が巧妙だ。

セキュリティ屋の視点 #

これは新手ではなく、北朝鮮系 Lazarus が "Contagious Interview" として運用してきた手口の インディーズ版 だ。攻撃面は「人間の信頼」と「npm の install hook」の合わせ技で、技術スキルより SE の精度で差がつく。

npm v12 では install 時の自動スクリプトが既定で無効化される予定だが、移行までは --ignore-scripts を癖にする か、課題コードは 必ず使い捨て VPS で開く ことが現実解になる。Roman 氏が無傷で済んだのは、サンドボックスで開き、採用担当の写真を逆画像検索する古典的検証を怠らなかったから。求人で渡される package.json は、もう "コード" ではなく "実行ペイロード" として扱うべきだ。

𝕏 Post B! Hatena

COMMENTS 0

No comments yet — be the first to leave one.

Post a comment