シンガポールのサイバーセキュリティ庁(CSA)の勧告 AD-2026-009 は 2026 年 8 月 6 日に公開され、9 月 7 日時点でもなお更新が続いています。一か月経っても動いていること自体が、事案が終わっていない証拠です。規模は、npm 上で1,300 を超えるパッケージ版が汚染され、それらの合計月間ダウンロード数は約 20 億回に達します。

汚染されたのは、誰も直接入れないキャッシュ系の基礎パッケージ

名指しされた版には keyv 6.0.0、cacheable 2.5.1、cacheable-request 13.0.20、flat-cache 6.1.24、file-entry-cache 11.1.6 が含まれます。共通点に注目してください。これらを意図的にインストールする人はほとんどいません。ESLint や HTTP クライアント、ビルドツールの依存ツリーの奥に潜んでいます。つまり「そんなパッケージは入れていない」は有効な確認になりません。実際にツリーを見る必要があります。

何を盗むのか:一覧に SSH 秘密鍵がある

マルウェアの名は ChainDrop、Shai-Hulud ファミリーの自己増殖型亜種です。窃取・外部送信の対象は、クラウド資格情報、GitHub トークン、SSH 鍵、Kubernetes 設定、Terraform 資格情報で、送信先ドメインは npm-cache[.]com——npm 自身のインフラに似せて選ばれた名前です。これらを手に入れると、盗んだ公開者資格情報でさらに多くのパッケージを汚染します。1,300 版超に到達した理由はまさにこれです。

マイクロソフトの脅威インテリジェンスによる 2026 年 8 月 4 日の分析が実行の詳細を補います。無関係な複数の公開者にまたがる 400 以上のパッケージ、高度に難読化された Bun ベースの JavaScript ペイロードが、npm の preinstall ライフサイクルフックを通じてインストール完了前に実行されます。CSA 勧告が挙げるフックファイルは setup.mjsMath_Symbol.jsmath_init.js です。

最初の足がかりは奇抜なゼロデイではありません。npm のセキュリティ通知を装ったフィッシングメールが、あるメンテナーのアカウントを奪いました。

サーバー管理者が自分ごととして扱うべき理由

核心は preinstall フックがあなたの権限で動くことです。あなたが読めるものは、それも読めます。そして本番も兼ねつつ時々 npm install が走るマシンでは、同じホームディレクトリに次のものが同居しがちです。

  • ~/.ssh/id_ed25519——おそらく他のサーバーへパスワード無しで入れる鍵
  • クラウド CLI の資格情報キャッシュ、.env の DB パスワードと API キー
  • ~/.docker/config.json~/.kube/config~/.terraform.d/

言い換えれば、開発者のノート PC でサプライチェーン攻撃が盗むのはコードへのアクセスですが、サーバーで盗まれるのはインフラ全体の鍵です。

いますぐやる 4 つのこと

  • 依存ツリーを調べるnpm ls keyv cacheable cacheable-request flat-cache file-entry-cache。ロックファイルから固定版を直接読むなら grep -n "keyv\|flat-cache\|file-entry-cache" package-lock.json
  • 該当したらホストは侵害済みとして扱う。CSA の指針は率直です。該当版を削除し、システムを侵害済みとみなし、悪性パッケージを入れたマシンは作り直し、露出したすべての資格情報を更新し、クラウドとソース管理環境に不正アクセスがないか確認する。更新の対象は SSH 鍵、GitHub トークン、クラウド API キーであり、パスワード変更だけでは足りません。
  • 過去の外向き通信を確認npm-cache[.]com への接続履歴があるか。ペイロードが実際に走ったかどうかの直接証拠になります。
  • 習慣を変える:CI と本番では --ignore-scripts 付きで導入し(npm ci --ignore-scripts)、本当にビルドスクリプトが要る少数のパッケージだけ個別に扱う。ビルドと実行は別の低権限ユーザーで動かす。SSH 鍵にはパスフレーズを付け、agent forwarding は切る。本番へ push できる鍵を本番機に置かない。

ビルドと実行を分けること自体が対策になる

この種の事案で最も損害が大きいのは「一台で何でもやる」構成です。ビルド機であり本番機であり、他のマシンへの鍵置き場でもある、という状態。ビルドを別インスタンスに移し、そこに本番の資格情報も本番への無パスワード経路も置かないようにすれば、汚染パッケージが壊せるのは作り直せるマシン一台だけになります。PM2 を使った VPS への Node.js アプリのデプロイにプロセスとユーザーの分離が、VPS のバックアップ戦略に「作り直す」を現実の選択肢にする前提条件が書かれています。SharkCloud のインスタンスは時間課金で随時作り直せます。ビルド専用の一台は、資格情報の流出一回よりはるかに安く済みます。