Shai-Hulud という自己複製型のワーム:180 件以上の npm パッケージを侵害

Self-replicating worm hits 180+ npm packages in (largely) automated supply chain attack

2025/09/16 HelpNetSecurity — npm レジストリで公開されているパッケージに対し、自己複製のワーム型ペイロードを展開するという、大規模なサプライチェーン攻撃が進行している。このワームは、侵害したパッケージの実行環境から被害者の認証情報を窃取し、その内容を攻撃者が管理する公開 GitHub リポジトリに送信するものであり、Shai-Hulud と呼称されている。そして、窃取した npm 認証トークンを用いて感染と侵害のサイクルを維持し、さらに侵害した GitHub トークンを利用して、非公開リポジトリを公開することが確認されている。

GitHub と npm の関係:npm トークンについて

npm は JavaScript のパッケージ・マネージャであり、数百万の JavaScript/Node.js パッケージをホストするオンライン・リポジトリ (npmjs.com) である。そして、それらのパッケージの大半が、GitHub リポジトリからビルドされている。

2020年に GitHub が npm Inc を買収した後は、npm レジストリは事実上 GitHub 傘下で運営されている。そのため、開発者は GitHub 経由で npmjs.com にログインし、レジストリへの公開に用いる npm アクセス・トークンを生成する。これらのトークンはローカル (開発者マシン) または CI/CD (例: GitHub Actions) に保存される。

Shai-Hulud ワーム

ReversingLabs のリバース・エンジニアである Karlo Zanki は「Shai-Hulud ワーム自体は、3MB を超える巨大な JavaScript ファイルである。しかし、その動作は、きわめてシンプルなものである」と説明している。

npm 開発者アカウントを侵害したワームは、そのメンテナーが管理する他のパッケージを探索して自身を注入し、新しいバージョンを公開する。それらの新たに作成されたパッケージは、インストール後のアクションで bundle.js を実行するように改変されるものである。それによりワームは、新たな被害者から認証情報を収集して、同様の手順を繰り返すことで拡散していく。

このワームは TruffleHog などの正規スキャンツールを利用して、GitHub 個人アクセス・トークン/AWS アクセスキー/GCP サービス認証情報/Azure 認証情報/npm 認証トークンなどのシークレットを探索する。そして、収集された認証情報は悪意のスクリプトにより検証され、GitHub トークンが発見された場合には、Shai-Hulud という公開リポジトリを作成し、収集データ (二重 base64 エンコード済) を /user/repos API 経由でアップロードする。

Wiz の研究者は「このワームは、アクセスが可能な全てのリポジトリに新しい GitHub Actions ワークフローをプッシュする。このアクションにより、それぞれのリポジトリのシークレットが、攻撃者が管理する “webhook.site” に送信される」と説明している。

このワームは、さらに被害者の GitHub アカウントを調査して、プライベート・リポジトリを公開し、リポジトリ名に “-migration” サフィックスを追加し、その説明文を Shai-Hulud Migration に変更する。

worm npm supply chain attack
Private repositories turned public by the worm (Source: Aikido Security)
S1ngularity 攻撃は Shai-Hulud 攻撃の前兆だったのか?

StepSecurity が公開しているのは、影響を受けるパッケージの最新リストであり、その件数は時間ごとに増加中である (執筆時点で確認された件数は 187 件) 。

ReversingLabs は、「最初に感染したパッケージは、”rxnt-authentication” だと特定している。このパッケージの、悪意のバージョン 0.0.3 は、9月14日 17:58:50 (UTC) に公開されている。そのメンテナーである techsupportrxnt が、感染者 0 号だと推測される」と発表している。

Aikido Security の研究者 Charlie Eriksen は、「この攻撃の最も顕著な特徴は、真のワームのように振る舞う点である。この攻撃者は、個々のパッケージを標的化する必要がない。1つの環境を侵害できれば、メンテナーの公開権限を悪用するワームが拡散を自動化する」と指摘している。

現時点において、この攻撃の背後にいる人物は不明であるが、2025年8月に発生した S1ngularity 攻撃との類似点は無視できない。そのときの攻撃では、Nx ビルド・システム・パッケージの悪意あるバージョンが、npm レジストリへ向けて配信されていた。

どちらのケースでも、攻撃者は以下のアクションを実施している。

  • 窃取したデータを、被害者の GitHub アカウント内の公開リポジトリへ流出。
  • 侵害した GitHub トークンを利用して、被害者の非公開リポジトリを公開に変更。
  • Linux または macOS を使用する開発者のみを標的にする。

最近では、広く利用される 18 個の npm パッケージに、暗号通貨窃取コードが注入されるという、サプライチェーン侵害が発生している。それらが、npm レジストリへアップロードされたことで、このエコシステムに大きな問題が生じている。