---
source_url: https://roman.pt/posts/linkedin-backdoor/
source_title: "A backdoor in a LinkedIn job offer"
source_site: "Roman Imankulov"
source_published_at: 2026-06-15T00:00:00+00:00
hero_image: https://roman.pt/posts/linkedin-backdoor/splash.png
tags: security,supply-chain-attack,malware,github
generated_at: 2026-06-16T00:00:31.633Z
model: claude-haiku-4-5
---
# LinkedIn経由の採用詐欺で仕組まれたバックドア攻撃

LinkedInの採用メッセージを通じた巧妙なサプライチェーン攻撃が明らかになった。暗号資産スタートアップの採用担当者と称する人物から紹介されたGitHubリポジトリに、npm installで自動実行されるバックドアが仕込まれていた。

仮想通貨スタートアップの採用担当者からLinkedInでメッセージを受け取ったRoman Imankulovは、GitHubリポジトリでNode modulesの非推奨化問題を確認するよう求められた。しかし指摘されたリポジトリには、テストスイートに偽装した約250行のバックドアが隠されていた。このコードはnpm installの際に自動実行される仕組みで、リモートサーバーから任意のペイロードを取得して実行する危険性を持つ。

## バックドアの仕組み

バックドア処理はapp/test/index.jsに埋め込まれており、テストスイートとして装いながら225行目付近でペイロードを隠していた。package.jsonのprepareスクリプトがapp/index.jsを起動時に実行し、app/index.jsは読み込み時にapp/test/index.jsを読み込むという入れ子構造により、npm installコマンド直後に自動的に悪意あるコードが実行される設計になっていた。バックドアが構築するURL（https://rest-icon-handler.store/icons/77）からリモートペイロードが取得される。

![バックドア構造](https://roman.pt/posts/linkedin-backdoor/splash_hu_6f6d450d0d33e225.png)

## 身元詐称と既存開発者の悪用

リポジトリの39個のコミットはすべて、実在する開発者の名前とメールアドレスで属性付けされていた。当該の開発者はImankulovに対し、自分はそのスタートアップで働いたことはなく、以前もGitHub上で身元を詐称されてリポジトリを削除されたことがあると述べた。採用担当者を名乗るLinkedInプロフィールは、実際には技術的背景を持たない美術ジャーナリストのものであり、完全に乗っ取られたものだった。

## 発見と報告

Imankulovは読み取り専用ツールを備えたエージェント「Pi」を使用してコードベースをレビューし、バックドアは即座に検出された。ImankulovはGitHubにリポジトリを報告し、LinkedInに採用担当者を報告したが、記事公開時点では依然としてコードは削除されていないままであった。

![ペイロード位置](https://roman.pt/posts/linkedin-backdoor/payload-in-test-file.png)

## 筆者の見立て

- より疲弊した日や急ぎの状況では、深く考えずにnpm installを実行していた可能性を示唆している
- 読み取り専用エージェントを使ったコード審査は、自分で読むより生産的であったと論じている
- このような攻撃パターンは誰にでも起こりうると解釈している

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典

Roman Imankulov、「A backdoor in a LinkedIn job offer」、https://roman.pt/posts/linkedin-backdoor/
