本文の内容は、2025年9月16日にAlberto Pellitteri and Michael Clark が投稿したブログ(https://www.sysdig.com/blog/shai-hulud-the-novel-self-replicating-worm-infecting-hundreds-of-npm-packages)を元に日本語に翻訳・再構成した内容となっております。
2025年9月15日、あるエンジニアがNPMリポジトリに対するサプライチェーン攻撃を発見しました。これまでのNPM攻撃とは異なり、この攻撃では、自己増殖型のマルウェア(ワームとも呼ばれる)が新たに利用され、感染が拡大しました。本稿執筆時点では、約200個の感染パッケージが確認されており、人気の高い@ctrl/tinycolorなどの複数のリポジトリや、CrowdStrikeが所有する複数のリポジトリが含まれています。
Shai-Huludと名付けられたこの新種のワームは、実行されると認証情報を窃取し、外部に持ち出し、自身を複製するための追加のNPMパッケージを探します。また、この悪意のあるコードは、プライベートリポジトリを公開することでGitHub上のデータを漏洩しようとします。
Sysdig脅威リサーチチーム(TRT)は、このワームの発見以来、その動向を監視してきました。迅速な対応により、新たな感染パッケージの数は大幅に減少しました。本稿執筆時点では数時間にわたり新たなパッケージは確認されていませんが、状況は今後変化する可能性があります。
この新しいワームがどのように動作するのか、オープンソースの Falco と Sysdig Secure でどのように検知するのか、そして次に何をすべきかを探ってみましょう。
Shai-Hulud ワームはどのように動作するのか?
ワームは、侵害された NPM パッケージの post-install フェーズ中に実行され、巨大な bundle.js スクリプトを走らせます。
...
"scripts": {
...
"postinstall": "node bundle.js"
}
...
Code language: JavaScript (javascript)
このコードは Linux および macOS マシンを標的とし、並列で複数の操作を実行して NPM パッケージレジストリ内で自身を拡散させ、認証情報のような機密情報を窃取します。
悪意のある NPM パッケージがインストールされると、Shai-Hulud はローカルシステムの探索を行います。まずマシン上の機密情報(GitHub や NPM の認証情報、および AWS や GCP の認証情報を含む)を検索し始めます。次にマルウェアは自身を拡散させ、他のエコシステムを侵害しようとします。
もし GitHub の認証情報が見つかった場合、ワームはその GitHub ユーザーと認証情報(ghp_* および gho_* tokens)を用い、当該ユーザーに属するリポジトリを順に巡回して、push アクションで起動される悪意のある GitHub Actions を使って永続化し、関連するシークレットを窃取します。認証情報を受け取るために https://webhook[.]site が使用されます。このサイト自体は本質的に悪意のあるものではありませんが、無料で使用できるため攻撃者が収集データのドロップボックスとして頻繁に利用します。

悪意のあるコードが実行するもう一つの不正な動作は、ユーザーがアクセスできる組織が所有するすべてのリポジトリをリストすることです。これらのリポジトリがプライベートリポジトリの場合、ユーザーの認証情報と元のデータを使用して、新しいパブリックリポジトリ(そのコンテンツを含む)が作成されます。新しいパブリックリポジトリの名前は、元のリポジトリと同一で、-migration というサフィックスが追加されます。


マルウェアのワーム部分はNPMエコシステムに関与します。マルウェアは有効なNPM認証情報を見つけると、getPackagesByMaintainer()関数を呼び出します。この関数は、キー所有者が管理するパッケージのリストを取得し、その詳細を取得して、月間ダウンロード数で並べ替えます。
次に、Shai-Huludはパッケージリストを使用してupdatePackage()関数を呼び出します。この関数は、悪意のある「bundle.js」コードをメンテナーのパッケージに拡散し、インストール後の段階でそのスクリプトを実行します。元のpackage.jsonは改ざんされ、「bundle.js」を実行します。このコードが、ワームの拡散が最初の24時間で急速に拡大し、約200個のパッケージに影響を与えた原因です。


trufflehog バイナリがダウンロードされ、ファイルシステム内の他の機密認証情報を検索するために使用され、発見されたシークレットが正当であるかどうかが検証されます。
Trufflehogは、シークレット情報の発見に使用される人気のオープンソースセキュリティツールです。以下は、ファイルシステム内の機密データを検索するために使用するコマンドです。
trufflehog filesystem . –json –results=verified
Shai-Hulud には、ローカルのファイルシステムとインスタンスメタデータサービス (IMDS) エンドポイントの両方を検索して、AWS および GCP の認証情報を検索するコードも含まれています。
最後に、以前のデータがすべて収集されると、悪意のあるJavaScriptはGitHubユーザーが認証されているかどうかを再度確認します。認証されている場合は、「Shai-Hulud」という名前の新しいGitHubリポジトリを作成し、そこに以前に発見した認証情報がBase64エンコードされたJSONファイルでアップロードされます。
Shai-Huludの手法の多くは、 8月末に報告されたNx攻撃と類似しています。しかし、類似点があるにもかかわらず、最も興味深いのは、このマルウェアが大幅に進化し、NPMエコシステム内で自己複製する能力を獲得したことです。

Shai-Hulud をどのように検知するのか?
Sysdig Secure脅威検知
マルウェアはランタイムにおいて複数の疑わしい実行を実行します。
Sysdig Secureのお客様は、Sysdig Runtime Behavioral Analyticsポリシーに含まれる「Reverse Shell Redirects STDIN/STDOUT Using UNIX Socket」監視ルールを活用できます。このルールは、trufflehogバイナリのダウンロード、解凍、実行権限の割り当てなど、JSアプリケーションによって実行される不審な実行を検知できます。

さらに、 GitHub アクション ランナーが webhook[.]site にアクセスしたときに、「Suspicious Domain Contacted During Package Install」というルールもトリガーされます。
GitHub の脅威検知に Sysdig Secure も使用しているお客様の場合、盗まれた認証情報に応じて次のルールがトリガーされる可能性があります。
- Create Public Github Repository
Falco
GitHubプラグインなどのFalcoプラグインを導入しているFalcoのお客様は、GitHubの脅威検知も実行できます。このGitHubルールは、疑わしいGitHubリポジトリ名を検知します。これにより、前述の「 Shai-Hulud」リポジトリ名や、以前のs1ngularity/nx攻撃で使用された「s1ngularity-repository」に一致する新しいGitHubリポジトリ名を検知できます。
- rule: Create Suspicious Public Repository
desc: Detect the creation of a new public repository
condition: github.type=repository and github.action=created and github.repo.public=true and (github.repo.name="Shai-Hulud" or github.repo.name contains “s1ngularity-repository” or github.repo.name endswith “-migration” )
output: A new public repository was created (repository_name=%github.repo.name repository_url=%github.repo.url repo_owner=%github.owner org=%github.org user=%github.user)
priority: WARNING
source: github
tags: [github]
Code language: PHP (php)
Sysdig セキュア脅威インテリジェンスフィード
Sysdig脅威リサーチチームは、脅威インテリジェンスページ(Home -> Threat Intelligence)に、影響を受けたパッケージおよびバージョンの存在をインベントリ上で自動的に照会するSysQLクエリを事前に追加しました。一目でこれらの侵害されたパッケージが環境のどこかにインストールされているかどうかを確認できます。

Sysdig TRTの推奨アクション
- 環境内で影響を受けるパッケージの使用状況を検索し、検出された場合は既知の安全なバージョンにロールバックします。
- 可能な場合はバージョン固定を活用します。
- サードパーティのソフトウェア パッケージが本番環境にインストールされているか、パイプラインを通過しているすべての領域が、ランタイム セキュリティコントロールによって監視され、考慮されていることを確認します。
- 影響を受ける場合は、アクセスされた可能性のあるすべての認証情報をローテーションします。
- 開発者エコシステム全体で検出または封じ込め制御が不足している場合は、npm をブロックすることで状況を制限できます。
- GitHub で異常なアクティビティや最近作成されたリポジトリがないか確認します。
- また、エンジニア個々の端末で TruffelHog の実行や webhook[.]site へのアウトバウンド接続がないか確認することを検討してください。
まとめ
サプライチェーン攻撃は頻度が増加しています。第三者パッケージにおける悪意のある活動を監視することはこれまで以上に重要です。悪意のあるコードはさまざまな方法で隠される可能性があるため、ランタイム脅威検知を用いることが、これらの攻撃を捕捉する上で不可欠です。Falco と Sysdig Secure はいずれもランタイムでの可視性と検知を提供し、さらに Sysdig Secure は追加の検知機能と、環境が悪意のあるパッケージによって影響を受けているかどうかを容易に確認できるインベントリシステムを提供します。