npmワームShai-Huludがサプライチェーンを侵害、脅威拡大

発端となったJavaScriptパッケージの侵害

日常的に利用されるJavaScriptライブラリをインストールしただけで、企業のクラウドインフラ、リポジトリ、内部サービスが攻撃者にさらされる恐れがあります。npmワーム「Shai-Hulud」は、非常に人気の高いパッケージ群に侵入しました。これらのパッケージは、月間20億回以上ダウンロードされています。その後、このワームは盗み出した開発者の認証情報を使って感染を広げていきました。感染したコンポーネントの数は急速に増加し、最新の推計では総数が1,000件を超えています。

攻撃は8月4日に始まりました。攻撃者はkeyvライブラリや複数の著名なキャッシュツールを保守する開発者Jared Wray氏のGitHubアカウントの侵害に成功しました。侵入者は主要プロジェクトのブランチに悪意あるファイルを直接注入しました。その後、標準的なGitHub Actionsの仕組みを使って新バージョンをリリースしました。その結果、感染したビルドは正規のnpm署名と正当な来歴データを取得することになり、外部からは完全に正規のアップデートに見えていました。

被害の広がりと拡散の仕組み

この侵害により、keyv、flat-cache、file-entry-cache、cacheable、cache-managerといった重要なライブラリが被害を受けました。開発者は複雑な依存関係の連鎖を通じて、これらのパッケージを間接的に組み込んでいることが少なくありません。当初感染が確認されたパッケージだけでも、週間ダウンロード数は数億件に上ります。さらに研究者らは、Deliveroo、OneReach、Picsart、Qlikなどの企業に関連する悪意あるコンポーネントのバージョンを発見しました。ただし、ダウンロード数の合計がそのまま感染デバイス数を意味するわけではありません。単一のプロジェクトが、相互に関連する複数のライブラリを同時にダウンロードするケースも多いためです。

感染した各バージョンには、setup.mjsファイルとMath_Symbol.jsファイルが仕込まれていました。さらに、package.jsonファイル内に悪意あるpreinstallコマンドが埋め込まれていました。npm installコマンドを実行すると、この悪意あるコードが自動的に起動します。この実行は、インストール処理が完了するかなり前の段階で行われます。秘密裏に仕込まれたローダーは、静かにBunランタイム環境をダウンロードします。続いて、約728キロバイトの難読化された主要ペイロードを実行します。

データ窃取の仕組み

この巧妙なマルウェアは、npmトークンやGitHubトークンを積極的に探索しました。加えて、AWSキー、Kubernetesシークレット、Dockerの認証情報、HashiCorp Vault・Slack・Stripeのトークンも標的にしていました。さらにこのスキャナーは、.envファイル、VPN設定、KeePassデータベースを執拗に探索しました。Terraformのステートファイル、開発環境の設定、SSH秘密鍵、データベース接続文字列も精査対象でした。macOSおよびLinuxのシステム上では、このプログラムはおよそ200種類の検索パターンを展開していました。同時に、最大64個のファイルを同時に読み取っていました。

このワームは、収集したデータを組織的に暗号化しました。そして最終的に、この情報を「Shai-Hulud: Here We Go Again」という説明文が付いた公開GitHubリポジトリへと送信していました。調査の結果、こうしたリポジトリは最終的に約1,300件確認されています。GitHubへのアップロードが失敗した場合に備え、このマルウェアには代替手段も用意されていました。攻撃者が2026年5月に登録したnpm-cache.comドメインへ接続する仕組みです。盗み出したトークンにより、このワームは新規開発者を装って感染パッケージのバージョンを公開することが可能になっていました。

被害軽減と復旧のための対策

その結果、この攻撃は手動でのアカウント侵害を一切必要とせず、プロジェクトからプロジェクトへとシームレスに広がっていきました。このnpmサプライチェーン攻撃でkeyvおよび関連パッケージがどのように侵害されたかを分析した結果、セキュリティ専門家は、犯罪者が感染した依存関係を過去にインストールしたことのあるビルドサーバーから、公開用トークンを直接窃取するケースが多かったと結論付けています。

セキュリティ専門家は、開発者に対しロックファイルを綿密に監査するよう強く推奨しています。また、CI/CDのログを確認し、devDependenciesを含むすべての依存関係を精査する必要があります。攻撃開始後に影響を受けたバージョンをインストールした開発チームは、直ちに対応を取らなければなりません。npmトークンやGitHubトークン、クラウドアクセスキー、CIシークレット、Vaultの認証情報を徹底的にローテーションする必要があります。将来的なリスクを軽減するため、専門家は安全性が確認されたライブラリのバージョンを厳格に固定することを推奨しています。開発者はnpm、yarn、pnpmといったパッケージマネージャーのoverrides機能を活用すべきです。さらに、インストールスクリプトが不要な場合には、ビルドシステムでのインストール実行時に「–ignore-scripts」パラメータを使用することも推奨されます。

翻訳元: https://meterpreter.org/shai-hulud-npm-worm/

ソース: meterpreter.org