☣️

npm史上最大:自己伝播ワーム「Shai-Hulud」のサプライチェーン攻撃

に公開

はじめに

お久しぶりです @___nix___ です。

背景

npmパッケージは、JavaScript/Node.js開発に欠かせない再利用可能な部品として、フロントエンドからサーバーサイドまで幅広く活用されてきました。共通処理を効率的に共有できる仕組みは、開発速度とエコシステム拡大を支える基盤となっています。

概要

npmエコシステムを支える多数の人気パッケージが、2025年9月に大規模なサプライチェーン攻撃「Shai-Hulud」の標的となりました。攻撃者は管理者アカウントを乗っ取り、187以上のnpmパッケージへ自己増殖型マルウェアを仕込み、依存関係を通じて被害を急拡大させました。

https://rocket-boys.co.jp/security-measures-lab/npm-supply-chain-hijack-2-billion-weekly-downloads/

https://innovatopia.jp/cyber-security/cyber-security-news/66239/

https://codebook.machinarecord.com/threatreport/silobreaker-cyber-alert/40916/

詳細

https://www.bleepingcomputer.com/news/security/self-propagating-supply-chain-attack-hits-187-npm-packages/

https://www.mend.io/blog/npm-supply-chain-attack-packages-compromised-by-self-spreading-malware/

攻撃の概要

187種類以上の著名npmパッケージ(例:@ctrl/tinycolor, ngx-toastr, angulartics2)が乗っ取られ、自己増殖型マルウェア「Shai-Hulud」に感染しました。

攻撃は複数のnpm管理者アカウントが侵害される形で始まり、感染したパッケージはbundle.jsなどの悪意あるコードを組み込み、依存関係や権限を利用してワーム的に拡大しました。

感染プロセスではpackage.jsonを改ざんし、正規の権限で改変済みパッケージを再公開。数時間で数千のプロジェクトに波及する可能性があると指摘されています。

マルウェアの挙動

  • npm installやupdate時に発動するライフサイクルフックを利用。
  • 正規ツールTruffleHogを悪用し、開発者端末やCI/CD上の認証情報(GitHubトークン、クラウドクレデンシャル、APIキーなど)を収集・検証。
  • AWS/GCP/AzureのメタデータAPIからも追加権限を奪取。
  • 盗んだ認証情報をまとめるため、GitHub上に“Shai-Hulud”というリポジトリを作成し、さらにGitHub Actionsを悪用してデータ流出やバックドア持続を維持。

影響範囲とリスク

  • CrowdStrike配下のnpmアカウントや、Google Gemini CLIなどの依存パッケージにも影響が及ぶ懸念あり。
  • 本体ソースコードや主要基盤への直接的侵入は確認されていない。
  • ただし、CI/CDパイプラインや本番サーバに感染すると、機密情報漏洩・不正権限利用・バックドア設置といった深刻なリスクが発生します。
  • 攻撃キャンペーンの特徴から、過去にnpmを標的とした S1ngularity/nx と同一グループによるものと見られています。

推奨される対策

  • 依存パッケージ・lockファイルを確認し、不審な変更やリポジトリ作成を監査。
  • CI/CDや管理者用クレデンシャルを全面的にローテーション。
  • 信頼済みのリリースに依存を固定し、プライベートnpmレジストリの利用も検討。
  • プルリクエストレビューの必須化、コミットや依存の強制スキャン導入など、SDLC全体でセキュリティを徹底。
  • 記事には被害パッケージのリストも公開されており、開発者は即座に確認・アップデートを求められています。

対応

奨励される対策は抽象的な説明をしていますが、具体的な対策についても触れておきます。
今回の攻撃を受けてセキュリティ専門企業である Aikido が専用パッケージを用意してくれました。

https://github.com/AikidoSec/safe-chain

主な特徴と機能

  • npmやyarnなど主要なパッケージマネージャーのコマンドをラップして動作し、パッケージのインストール前にマルウェアチェックを実施。
  • チェックはAikido Intelというオープンソースの脅威インテリジェンス情報に基づく。
  • マルウェアが検出されると、デフォルトでインストールをブロックしてコマンドを終了。ユーザーに許可を求めるモードも設定可能。
  • 対応シェルはbash、zsh、fish、PowerShellなど多岐にわたり、シームレスな操作環境を実現。
  • Node.js 18以上に対応している。

導入と使い方

  1. npm を使用して Aikido Safe Chain パッケージをグローバルにインストールします。

    npm install -g @aikidosec/safe-chain
    
  2. 次を実行してシェル統合を設定します。

    safe-chain setup
    
  3. ❗Aikido Safe Chainの使用を開始するには、 ターミナルを再起動してください。
    この手順は、npm、npx、yarn、pnpm、pnpx のシェルエイリアスが正しく読み込まれるようにするために重要です。ターミナルを再起動しないと、エイリアスは利用できなくなります。

  4. 次のコマンドを実行してインストールを確認します。

    npm install safe-chain-test
    

    出力には、このパッケージがマルウェアとしてフラグ付けされているため、Aikido Safe Chain によってこのパッケージのインストールがブロックされていることが示されるはずです。

npm または npx, yarn, pnpm, pnpx のコマンドを実行すると、Aikido Safe Chainはインストールしようとしているパッケージにマルウェアがないか自動的にチェックします。マルウェアが検出された場合は、コマンドを終了するように促すメッセージが表示されます。

マルウェア検出時のメッセージ

$ npm install safe-chain-test
✖ Malicious changes detected:
 - safe-chain-test@0.0.1-security
  
Exiting without installing malicious packages.

CI/CD統合

  • CI/CD環境での利用にも対応し、安全な開発パイプライン構築を支援

アンインストール

  • alias除去→パッケージ削除→端末再起動の手順で簡単にアンインストール可能

重要

今回の対応で重要なのは、lockファイルの中に感染パッケージが存在しないかを継続的にチェックすることですが、 Shai-Huludの自己増殖性から、感染パッケージは今後も拡大する恐れがあり、一度の確認で安心せずに定期的な監査が欠かせません。そのため問題が落ち着くまでは、safe-chain のような信頼できるマルウェア検出ツールの利用が必須となります。これにより、被害拡大の早期発見と迅速な対応が期待できます。

終わりに

2025年のnpmサプライチェーン攻撃「Shai-Hulud」は、JavaScript開発の基盤を揺るがす重大な脅威です。開発者は依存パッケージの管理と認証情報の保護を徹底し、早急な対応が求められます。本件はソフトウェアサプライチェーンの安全確保の重要性を再認識させる契機となりました。

一言

最近、税理士さんを変えましたw

Discussion