広く利用されている複数のnpmパッケージを管理するメンテナーのGitHubアカウントが攻撃者に侵害され、JavaScriptエコシステムを狙った大規模なソフトウェアサプライチェーン攻撃が発生している。
インシデントは2026年8月4日に始まった。この日、keyv、flat-cache、file-entry-cacheなどのパッケージに悪意あるコードが仕込まれたが、攻撃はすぐに拡大し、より広範なShai-Huludキャンペーンへと発展して、さらに数百のパッケージに拡散した。
Aikidoの研究者によると、攻撃者は、週当たりおよそ1億2700万ダウンロードを記録するパッケージkeyvのメンテナーのGitHubアカウントを侵害した。
その後、GitHub Actionsを使って悪意あるアップデートを公開した。
リリースは正規のワークフローから生成されたため、侵害されたパッケージは有効な出自情報付きでnpmに公開され、本物であるかのように見えた。
主なポイント
- 攻撃者は人気のnpmメンテナーアカウントを乗っ取り、Shai-Huludサプライチェーン攻撃を開始した。
- このキャンペーンは月間インストール数が20億回を超える数百のパッケージに拡大した。
- 悪意あるパッケージはnpmのpreinstallスクリプトを使い、クラウド、GitHub、Kubernetes、APIの認証情報を窃取した。
- 有効なGitHub Actionsの出自情報により、侵害されたパッケージのリリースは正規のものに見えた。
- 組織は直ちに開発パイプラインを保護し、認証情報をローテーションするとともに、ソフトウェアサプライチェーンのセキュリティ管理を強化すべきだ。
Shai-Hulud攻撃、npmサプライチェーン全体に拡大
この攻撃はその後、単一の侵害されたメンテナーを超えて拡大した。
Aikidoは、マルウェアが他の組織の管理するパッケージにも拡散し、月間インストール数が20億回を超える数百のパッケージに影響を及ぼしたと報告した。
当初侵害されたパッケージには、次のものが含まれていた。
- keyv
- flat-cache
- file-entry-cache
- cacheable
- cache-manager
- cacheable-request
- @cacheable/node-cache
- @cacheable/memory
- @cacheable/utils
- ecto
研究者はまた、Deliveroo、OneReach、Picsart、Qlikなどの組織に関連する侵害パッケージも特定し、JavaScriptサプライチェーン全体に攻撃がいかに急速に拡大したかを示した。
Shai-Huludマルウェア、npmのpreinstallスクリプトで認証情報を窃取
ユーザーが悪意あるコードを手動で実行する必要がある攻撃とは異なり、今回のキャンペーンではnpmのpreinstallライフサイクルフックが悪用された。
影響を受けた各パッケージには、package.jsonファイルを通じて参照される新たなsetup.mjsファイルが含まれていた。npm installの実行時に、このスクリプトはインストール完了前に自動実行された。
ドロッパーはBun JavaScriptランタイムをダウンロードした後、Math_Symbol.jsと呼ばれる難読化ペイロードを起動した。これは728KBの認証情報窃取プログラムだった。
研究者は、マルウェアが以下を含む複数の情報源から認証情報を収集していたことを確認した。
- npm認証トークン
- GitHubパーソナルアクセストークンおよびGitHub Actions認証情報
- AWSアクセスキー、IAM認証情報、EC2メタデータ、Secrets Manager
- Kubernetesサービスアカウントトークンおよびクラスターシークレット
- HashiCorp Vaultトークンおよび保存されたシークレット
- StripeおよびSlackのAPIトークン
- SSHキー、秘密証明書、Terraformステートファイル、Docker認証情報、VPN設定、多数の.envファイル
マルウェアは収集したデータを暗号化してから、公開GitHubリポジトリへ持ち出した。
研究者はまた、侵害された依存関係をインストールしたメンテナーが管理する追加のnpmパッケージに感染させる、ワームに似た挙動も確認した。これにより、キャンペーンはエコシステム全体に急速に拡大した。
組織がShai-Hulud攻撃に対応する方法
影響を受けたパッケージのバージョンを使ってソフトウェアをインストールまたはビルドした組織は、問題がないと証明されるまで、認証情報や開発環境が露出した可能性があると想定すべきだ。
- 影響を受けたパッケージのバージョンを特定して削除し、推移的依存関係も含め、開発、ビルド、CI/CD環境から取り除く。
- 露出した可能性のある認証情報をすべてローテーションし、npm、GitHub、クラウド、Kubernetes、Vault、APIのトークンを含め、必要に応じて有効なセッションを無効化する。
- 影響を受けた開発者ワークステーションとCI/CDランナーを再構築し、信頼できるイメージから構築したうえで、侵害の痕跡や不正な外向き通信をスキャンする。
- GitHub Actionsのワークフロー、ビルドログ、パッケージ公開活動、露出期間中に作成されたソフトウェアリリースを確認し、不正な変更の兆候がないか調べる。
- ソフトウェアサプライチェーンのセキュリティを強化し、DevSecOpsツール、ソフトウェア構成分析(SCA)、依存関係の監視、バージョンの固定、パッケージの許可リスト化、信頼できる社内パッケージリポジトリを活用する。
- フィッシング耐性のあるMFA、ハードウェアセキュリティキー、最小権限アクセスを義務付け、ソースコードリポジトリとパッケージ公開ワークフローに対する管理を強化する。
- テストするインシデント対応計画をソフトウェアサプライチェーン攻撃のシナリオで検証する。依存関係の侵害、認証情報のローテーション、開発環境の復旧、安全なソフトウェアの再構築などを含める。
これらの措置を講じることで、組織は現在の攻撃によるリスクを低減しながら、将来の侵害に対するソフトウェアサプライチェーンのレジリエンスを高められる。
結論
今回のキャンペーンは、ソフトウェアサプライチェーンのセキュリティが単なる開発上の問題ではなく、ビジネスリスクであることを改めて示している。
ソフトウェアエコシステムの相互接続が進む中、ガバナンス、可視性、安全な開発手法は、企業のレジリエンスに不可欠な要素となっている。
脅威に対するレジリエンスの構築は、包括的なソフトウェアサプライチェーンセキュリティ対策の採用から始まる。





