2026年5月14日、Node.js のプロセス間通信ライブラリ node-ipc に、認証情報を盗むマルウェアを仕込んだ悪意あるバージョンが公開された。週間約70万ダウンロード、400以上の OSS が直接依存する基盤ライブラリだ。
怖いのは手口。これは「偽パッケージ」でも「インストールフックの悪用」でもない。正規の node-ipc が乗っ取られ、require("node-ipc") でロードされた瞬間にペイロードが発火する。つまり npm ci --ignore-scripts をやっていても防げない。
しかもライブラリの乗っ取り方が、防御側の盲点をそのまま突いてくる。
何が起きたのか
| 項目 | 内容 |
|---|---|
| 対象 | npm パッケージ node-ipc
|
| 汚染バージョン |
9.1.6 / 9.2.3 / 12.0.1
|
| 公開日 | 2026年5月14日 |
| 週間DL数 | 約70万(※ソースにより53万〜82万と幅あり) |
| 盗む対象 | クラウド認証情報・SSH鍵・K8sトークン・CI/CDシークレット等 |
| 検出まで | 数分〜数時間(Socketは公開3分以内に検知) |
汚染版を npm install した、あるいはそれを含むビルドを回した環境は、そこにあったシークレットすべてを侵害された前提で扱う必要がある。
手口①:失効ドメインを買い戻してアカウントを乗っ取る
侵入経路がうまい。攻撃者は脆弱性を突いていない。正規のパスワードリセット機能でアカウントを奪っている。
- node-ipc に過去コミットのある、2022年以降休眠状態のメンテナアカウントに目を付ける
- そのアカウントの復旧用メールのドメインが2025年に失効しているのを発見
- 攻撃者がそのドメインを買い戻す(2026年5月)
- ドメインが手に入れば復旧メールを受信できる → npm の標準パスワードリセットで publish 権限を正規手順で奪取
元メンテナのPCにもnpmのインフラにも一切侵入していない。「捨てられたドメイン」だけで公開権限が乗っ取られた。これは node-ipc に限らず、古いOSSすべてに刺さる構造的な穴だ。
手口②:require した瞬間に発火する仕込み
ペイロードの仕込み場所も巧妙だった。
- npm の lifecycle script(
postinstall等)ではなく、CommonJS のエントリポイントnode-ipc.cjsの末尾に約80KBのコードを追記 - ファイルサイズは通常 約37KB → 約117KB に膨張
-
require("node-ipc")でロードされるたびに発火
ここが重要で、サプライチェーン対策の定番である --ignore-scripts(インストール時スクリプトの無効化)は require 時実行には無力。アプリやビルドがそのモジュールを読み込めば動いてしまう。
盗む対象は90カテゴリ超。AWS / Azure / GCP の認証情報、SSH秘密鍵、Kubernetes・Docker・Terraform の資格情報、GitHub トークン、npm トークン、.env、シェル履歴、環境変数を丸ごと。
そして送信が陰湿で、HTTP通信ではなく DNS TXT クエリで外部に持ち出す。さらにシステムのDNSを 8.8.8.8 に書き換えてローカルのDNS監視を回避する。HTTPの外向き通信だけ見張っていても気づけない。
自分の環境が汚染されていないか確認する
まずこれを実行する。
# 直接・推移的依存に node-ipc があるか
npm ls node-ipc
# lockfile に汚染バージョンが固定されていないか
grep -nE "node-ipc.*(9\.1\.6|9\.2\.3|12\.0\.1)" package-lock.json
該当したら、フォレンジックとして以下も確認する。
-
node-ipc.cjsのファイルサイズ異常(正常 約37KB に対し 約117KB なら汚染) - CloudTrail / Azure Activity Log / GCP Audit Log の不審なアクセス
対策:require時実行を前提にした多層防御
--ignore-scripts で安心、という前提を捨てるのが今回の教訓。
-
安全版へピン留め+ロックファイル再生成:
node-ipc@12.0.0または9.2.1に固定し、lockfile を再生成。npm cache clean --forceでキャッシュも掃除する -
シークレットの即時ローテーション:汚染版をインストールしたなら侵害確定として、AWSキー → SSH鍵 → K8sトークン → GitHub PAT → クラウドのサービスアカウント鍵 →
.env→ npmトークン、の順で全部回す -
CI/CDの外向きDNSを制限・監視:今回の肝。
53/UDPの TXT クエリや、8.8.8.8 への直接問い合わせを検知・遮断する。エグレスを既知のレジストリ/APIに絞る - 新バージョンの即時採用をやめる:公開直後の版を即取り込まず、数日のクールダウンを置く。今回の被害は「公開直後に取得した環境」に集中した
-
SCAツールの常時運用:
npm auditに加え Socket / Snyk / StepSecurity 等で既知の悪性バージョンを継続検知する
まとめ
- node-ipc の
9.1.6/9.2.3/12.0.1は認証情報窃取マルウェア入り。使っていたら侵害確定として対応する - 乗っ取りは失効ドメインの買い戻し→正規パスワードリセット。古いOSSのメンテナアカウントは全部この穴を持ちうる
- ペイロードはrequire時に発火するので
--ignore-scriptsでは防げない。送信はDNS TXTで8.8.8.8経由、HTTP監視はすり抜ける - 防御は「lockfile固定+シークレット即ローテ+外向きDNS監視+新版クールダウン」の多層で
「人気ライブラリだから安全」はもう通用しない。依存は資産ではなく、攻撃面だと考えて運用するしかない。
参考
- Active Supply Chain Attack: Malicious node-ipc Versions Published to npm — StepSecurity
- Popular node-ipc npm package compromised to steal credentials — BleepingComputer
- Backdoored node-ipc npm releases steal developer credentials through DNS queries — Datadog Security Labs
- Expired domain leads to supply chain attack on node-ipc npm package — CSO Online
※ 週間ダウンロード数や悪性バージョンの生存時間など一部の数値はソース間で差があり、本記事は複数ソースで最も整合する値を採用しています。