エグゼクティブ サマリー
更新情報:2025年11月25日
Unit 42のリサーチャーは、「Shai-Hulud 2.0」と呼ばれるキャンペーンにおいて、npmを標的とした新たな侵害活動を調査しました。これは2025年11月初旬に最初に報告されたものです。現在のキャンペーンは範囲が大幅に拡大しており、約350のユニークユーザーにまたがる25,000以上の悪意あるリポジトリを含む、数万ものGitHubリポジトリに影響を及ぼしています。
11月のキャンペーンにおける主な相違点
- プレインストール(pre-install)段階での実行により、影響範囲が劇的に拡大しました。
- 本キャンペーンでは、ユーザーのホームディレクトリの破壊を試みる、はるかに攻撃的なフォールバック(代替)メカニズムが導入されました。
- 新しいペイロードファイル名は setup_bun.js および bun_environment.js です。
- 窃取された認証情報やシークレットは、「Sha1-Hulud: The Second Coming(Sha1-Hulud:再臨)」というリポジトリ説明文が付けられたパブリックGitHubリポジトリに外部送信(エクスフィルドレーション)されます。
Shai-Hulud 2.0キャンペーンは、ソフトウェアサプライチェーン攻撃における攻撃的なエスカレーションを象徴しており、感染ポイントを変更することで前身の手法を超えた進化を遂げています。ソフトウェア依存関係のプレインストール段階を標的にすることで、このマルウェアは2つの重要なブレークスルーを達成しています。
- 人的対話の必要性を完全に排除し、感染したパッケージを処理するほぼすべてのビルドサーバーでの実行を確実にします。
- ビルドの後段でコードを検査する静的スキャンツールを効果的に回避します。
この脅威は依然として価値の高いクラウド認証情報の窃取に焦点を当てていますが、企業のCI/CDパイプライン全体を麻痺させる可能性もあります。これにより開発が中断され、内部システムからロックアウトされる可能性があり、単なるスパイ活動から極めて破壊的なサービス拒否(DoS)イベントへと攻撃がエスカレートする恐れがあります。
技術的な詳細については、「攻撃の現在の範囲」セクションをご覧ください。
9月、Unit 42は数百のソフトウェアパッケージ侵害の原因となった、自己増殖する新型ワームを「Shai-Hulud」として調査しました。
この攻撃は、自動化された拡散機能によって規模を拡大させており、サプライチェーンに対する脅威の大きな進化を示すものです。Unit 42はまた、コメントと絵文字が含まれていることから、悪意のあるbashスクリプトを生成するためにLLMが使用されていると、と中程度の確度で評価しています。
パロアルトネットワークスのお客様は、以下のようなさまざまな製品やサービスを通じて、本攻撃に対するより強固な保護を構築したり、攻撃の側面に対する緩和策を備えることができます。
- Cortex Cloud
- Prisma Cloud
- Cortex XDRおよびXSIAM
- Advanced URL Filtering
- Advanced WildFire
- Next-Generation Firewall とともに Advanced Threat Prevention
Unit 42 インシデント レスポンスチームは、お客様のリスクを低減するために、侵害を受けた際の支援だけでなくプロアクティブな評価を提供しています。
| Unit 42の関連トピック | サプライチェーン, クレデンシャル ハーベスティング, フィッシング攻撃, JavaScript |
npmパッケージとサプライチェーンの背景
この攻撃は、npmになりすまし、開発者に多要素認証(MFA)のログイン オプションを「更新」するよう求める、クレデンシャル ハーベスティング フィッシング攻撃キャンペーンに端を発している可能性が示唆されています。初期アクセスを獲得すると、脅威アクターはワームとして機能する悪意のあるペイロードをデプロイし、多段階の攻撃シーケンスを開始することが確認されています。Bashスクリプトにコメントと絵文字が含まれていることから、Unit 42では、脅威アクターが悪意のあるコードを記述するためにLLMを利用していると中程度の信頼性で評価しています。
悪意のあるパッケージ バージョンには、インストール後にスクリプトを実行するワームが含まれています。このマルウェアは、侵害された環境をスキャンして、以下のような機密情報を探し出す機能を備えるものです。
- .npmrcファイル(npmトークン用)
- GitHub Personal Access Tokens (PAT)やクラウドサービスのAPIキーに特化した環境変数や設定ファイル:
- Amazon Web Services WAF
- Google Cloud Platform/GKE
- Microsoft Azure
収取された認証情報は、アクターが管理するエンドポイントに流出します。マルウェアはプログラムによって、標的となった被害者のアカウント下に「Shai-Hulud」という名前の新しいGitHub公開リポジトリを作成し、盗み出したシークレットをそこにコミットし、一般に公開するものです。
盗んだnpmトークンを使って、マルウェアは侵害された開発者としてnpmレジストリを認証します。そして、その開発者が保守している他のパッケージを特定し、そこに悪意のあるコードを注入し、新しい危険なバージョンをレジストリに公開します。この自動化されたプロセスにより、脅威アクターが直接介入することなく、マルウェアは指数関数的に拡散することに成功しています。
現在の攻撃範囲
2025年11月現在、「Shai-Hulud 2.0」と呼ばれるキャンペーンにおいて、npmを標的とした侵害活動が再燃しています。
- (ポストインストールではなく)プレインストール時の実行: 開発者のマシンおよび継続的インテグレーション/継続的デリバリー(CI/CD)パイプライン全体において、影響範囲が劇的に拡大しました。
- はるかに攻撃的なフォールバックメカニズム: 戦術が純粋なデータ窃取から懲罰的な破壊活動へと移行しています。マルウェアが認証情報の窃取、トークンの取得、または外部送信チャネルの確保に失敗した場合(つまり、GitHubへの認証、リポジトリの作成、またはGitHub/npmトークンの発見ができない場合)、被害者のホームディレクトリ全体の破壊を試みます。これは、現在のユーザーが所有するホームフォルダ配下のすべての書き込み可能なファイルを安全に上書きし、削除することで行われます。
- 新しいペイロードファイル: これらは setup_bun.js および bun_environment.js という名前です。攻撃は有用なBunインストーラーを装っています。コアペイロードである bun_environment.js は、極度な難読化技術を使用した巨大なファイル(10MB以上)です。開発者のマシン上での完全な実行を遅らせるために、デタッチされたバックグラウンドプロセスへと自身をフォーク(分岐)させます。これにより、元のインストールプロセスは正常に終了し、ユーザーには通常のインストールが行われたかのような錯覚を与えます。
- Sha1-Hulud: 窃取された認証情報やシークレットは、「Sha1-Hulud: The Second Coming」というリポジトリ説明文が付けられたパブリックGitHubリポジトリに外部送信されます。また、discussion.yaml という名前のGitHub Actionsワークフローファイルを作成することで、永続化を試みます。このワークフローは感染したマシンをセルフホストランナーとして登録し、攻撃者がGitHubディスカッションを開くことで任意のコマンドを実行できるようにします。
2025年11月以前の攻撃範囲
侵害の範囲は広範に及び、数百万の週間ダウンロード数を誇る広く使用されている @ctrl/tinycolor ライブラリを含む、多数のパッケージに影響を与えています。
このキャンペーンによる認証情報の窃取は、クラウドサービス(AWS、Azure、GCPなど)の侵害に直結し、ストレージバケットからのデータ窃取、ランサムウェアの展開、クリプトマイニング(暗号資産採掘)、または本番環境の削除につながる可能性があります。また、データベースの直接的な窃取や、フィッシングのためのサードパーティサービスの乗っ取りにつながる恐れもあります。さらに、窃取されたSSH鍵により、侵害されたネットワーク内でのラテラルムーブメント(横展開)が可能になる場合もあります。
暫定的なガイダンス
- 認証情報のローテーション: すべての開発者クレデンシャルのローテーションを行うことが即刻必要です。これには、npmのアクセストークンをはじめ、GitHubのPATやSSHキー、クラウドやサードパーティ サービスのすべてのプログラム アクセスキーが含まれます。開発者のマシンに存在するシークレットが漏洩しているかもしれないと仮定したアクションが求められます。
- 依存関係の監査: すべてのプロジェクトの依存関係を徹底的かつ迅速に監査することが求められます。npm auditのようなツールを使って、脆弱なパッケージのバージョンを特定します。プロジェクトのpackage-lock.jsonまたはyarn.lockファイルを精査し、既知の危険なパッケージを使用していないことを確認してください。影響を受ける依存関係を直ちに削除または更新する必要があります。
- GitHubアカウントのセキュリティレビュー: すべての開発者は、自分のGitHubアカウントで、認識できない公開リポジトリ(特に「Shai-Hulud」)がないか、不審なコミットがないか、GitHub Actionsのワークフローに予期せぬ変更がないか、確認してください。
- MFAの実施: 特にGitHubやnpmのような重要なプラットフォームでは、認証情報の乱用を防ぐために、すべての開発者アカウントでMFAが厳密に実施されるようにする必要があります。
Unit 42マネージド脅威ハンティング用クエリ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Description: Check for connections to any webhook.site domains in raw NGFW URL logs. Optional filter for specific URI observed in use by threat actor. dataset = panw_ngfw_url_raw | filter lowercase(url_domain) contains "webhook.site" | alter susp_uri = if(uri contains "bb8ca5f6-4175-45d2-b042-fc9ebb8170b7") // Optional filter: // | filter susp_uri = true | fields url_domain, uri, susp_uri, * |
|
1 2 3 4 5 6 7 8 9 |
// Description: Check for connections to any webhook.site domains in XDR telemetry. Optional filter for specific URI observed in use by threat actor. dataset = xdr_data | filter event_type = STORY | filter lowercase(dst_action_external_hostname) contains "webhook.site" or lowercase(dns_query_name) contains "webhook.site" | fields agent_hostname, dst_action_external_hostname, dns_query_name |
|
1 2 3 4 5 6 7 |
// Description: Detect malicious YAML file dataset = xdr_data | filter event_type = FILE and action_file_name = "shai-hulud-workflow.yml" and agent_os_type in (ENUM.AGENT_OS_MAC, ENUM.AGENT_OS_LINUX) | fields agent_hostname, actor_effective_username, action_file_name, action_file_path, actor_process_image_name, actor_process_command_line |
|
1 2 3 4 5 6 7 |
// Description: Detects Trufflehog usage. Legitimate tool abused by threat actor for secrets discovery. False positives may occur if there is legitimate use. dataset = xdr_data | filter event_type = PROCESS and lowercase(action_process_image_command_line) contains "trufflehog" | fields agent_hostname, actor_effective_username, actor_process_command_line, action_process_image_command_line |
2025年11月のキャンペーンに対応する追加のクエリ
|
1 2 3 4 5 6 7 |
// Description: Detect malicious bundle.js, bun_environment.js, and setup_bun.js files preset = xdr_file | fields agent_hostname, action_file_name, action_file_path, event_type, event_sub_type, actor_process_image_name, actor_process_command_line, action_file_sha256 | filter event_type = ENUM.FILE | filter action_file_sha256 = "46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09" // bundle.js from September 2025 attack or action_file_sha256 in ("62ee164b9b306250c1172583f138c9614139264f889fa99614903c12755468d0", "f099c5d9ec417d4445a0328ac0ada9cde79fc37410914103ae9c609cbc0ee068", "cbb9bc5a8496243e02f3cc080efbe3e4a1430ba0671f2e43a202bf45b05479cd") // bun_environment.js from November 2025 attack or action_file_sha256 = "a3894003ad1d293ba96d77881ccd2071446dc3f65f434669b49b3da92421901a" // setup_bun.js from November 2025 attack |
|
1 2 3 4 5 6 |
// Description: Detects the unique SHA1HULUD string used in runner creation preset = xdr_process | fields agent_hostname, actor_effective_username, action_process_image_name, action_process_image_path, action_process_image_command_line, actor_process_image_name, actor_process_image_path, actor_process_command_line, agent_os_type, event_type, event_sub_type | filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START | filter action_process_image_command_line contains " --name SHA1HULUD" |
|
1 2 3 4 5 6 7 |
// Description: Detects an extremely large (>=9MB) bun_environment.js file. False positives are possible, be sure to check action_file_path for the package name and version of any hits. preset = xdr_file | fields agent_hostname, action_file_name, action_file_path, action_file_size, event_type, event_sub_type, actor_process_image_name, actor_process_command_line, action_file_sha256 | filter event_type = ENUM.FILE and event_sub_type = ENUM.FILE_WRITE | filter action_file_name = "bun_environment.js" and action_file_size >= 9437184 |
結論
Shai-Huludワームは、オープンソース コミュニティーを標的とした現在進行中の一連のNPM攻撃における、重大なエスカレーションを代表しています。こ認証情報が盗まれ、個人リポジトリが公開されたs1ngularity/Nxの侵害や、2024年9月に観測された広範囲に及ぶ故宮フィッシング攻撃キャンペーンなどの最近のインシデントに続くものです。
その自己複製設計は特に注目すべきもので、エコシステム全体への拡散を目的に、メンテナの既存の出版権を悪用する自動拡散メカニズムと、クレデンシャル ハーベスティングを効果的に組み合わせているのが特徴です。さらに、AIが生成したコンテンツがShai-Huludキャンペーンに統合されていることが確認されており、これはs1ngularity/Nx攻撃による偵察用AIコマンドライン ツールの明確な武器化に続く展開とされます。これはAIを悪意のある活動に悪用する脅威アクターの手法が常に進化していることを意味し、シークレットの拡散を加速するものです。
このような攻撃手法の一貫した洗練された性質は、オープンソース ソフトウェアのサプライチェーンに対する脅威の増大を浮き彫りにしています。これらの攻撃は、継続的インテグレーションと継続的デリバリー(CI/CD)のスピードで伝播しており、エコシステム全体にとって長期的かつ増大するセキュリティ上の課題となっています。
パロアルトネットワークスは、本調査結果をサイバー脅威アライアンス(CTA)のメンバーと共有しています。CTAの会員は、この情報を利用して、その顧客に対して迅速に保護を提供し、悪意のあるサイバー アクターを組織的に妨害しています。サイバー脅威アライアンスについて詳細を見る。
パロアルトネットワークス製品によるnpmパッケージのサプライチェーン攻撃の防御と検出
パロアルトネットワークスのお客様は、さまざまな製品保護、サービス、アップデートを活用して、本脅威を特定し組織を保護いただけます。
情報漏えいの可能性がある場合、または緊急の案件がある場合はUnit 42インシデント レスポンス チームまでご連絡ください。
- 北米:フリーダイヤル: +1 (866) 486-4842 (866.4.UNIT42)
- 英国: +44.20.3743.3660
- ヨーロッパおよび中東: +31.20.299.3130
- アジア: +65.6983.8730
- 日本: +81.50.1790.0200
- オーストラリア: +61.2.4062.7950
- インド: 000 800 050 45107
Advanced WildFire
Advanced WildFireの機械学習モデルと分析技術は、本脅威に関連するインジケーターに照らして見直され、更新されています。
高度な脅威防御機能を備えた次世代ファイアウォール
「Advanced Threat Prevention」セキュリティ サブスクリプションを有効にした次世代ファイアウォールは 「Next-Generation Firewall」、脅威防御シグネチャ「87042」「87046」「87047」によってこの攻撃をブロックできます。
次世代ファイアウォール向けのクラウド提供型セキュリティサービス
「Advanced URL Filtering 」は、中間者(MitM)フィッシング攻撃をブロックし、この活動に関連するURLを悪意のあるものとして分類します。
Cortex XDRおよびXSIAM
Cortex XDRおよび XSIAMエージェントは、本記事で取り上げた脅威から保護するのに効果的です。エージェントは既知の悪意のあるマルウェアの実行を防止し、振る舞い脅威防御とローカル分析モジュールに基づく機械学習によって未知のマルウェアも阻止することができます。
Cortex Cloud
Cortex Cloud は、広範な ASPM(アプリケーションセキュリティポスチャ管理)およびサプライチェーンセキュリティ機能を提供し、Shai-Hulud が悪用する脆弱性や設定ミスの特定を支援します。リアルタイムの SBOM(ソフトウェア部品表)の可視化により、チームは即座にインベントリを既知の悪意ある npm パッケージと照合することができます。プラットフォームのオペレーショナルリスク(Operational Risk)モデルは、メンテナンスのアクティビティ、非推奨のシグナル、コミュニティの健全性に基づいてオープンソースコンポーネントを評価することで、防御層を追加し、CVE が公開されていない段階でもリスクのあるパッケージにフラグを立てます。
パイプラインを強化するために、Cortex Cloud は OWASP および CIS のガイダンスに沿った、すぐに使える(out-of-the-box)CI/CD ルールを提供します。これには、欠落している npm ロックファイルのチェック、安全でない「npm install」の使用、コミットハッシュのない git ソースパッケージ、攻撃対象領域(アタックサーフェス)を拡大させる未使用の依存関係のチェックなどが含まれます。
CVE の公開は実際の攻撃よりも遅れることが多いため、認可されていない npm パッケージバージョンにアプリケーションが依存していないかを確認・検証することが極めて重要です。これらのコントロールを組み合わせることで、悪意あるバージョンがビルドに静かに混入したり、環境内に残留したりすることを防ぐことができます。
Cortex Cloud は、Cortex Cloud を使用してサプライチェーン攻撃を検知および防御する方法について解説した詳細なブログ記事を公開しています。
Prisma Cloud
Prisma Cloudは、悪意のあるパッケージの使用の検出や、パイプラインの誤設定を認識するのに役立ちます。パイプラインの誤設定を特定することで、顧客がテストされていない/認可されていないOSSパッケージのバージョンを使用する恐れのあるパイプラインを使用するのを防止することができます。なお、本スキャナーは、脆弱性、ライセンス問題、運用上のリスクを検出するために設計されており、新しいパッケージ上の悪意のあるコードを検出するものではありません。関連するCI/CDアラートを調査し、アプリケーションが認可されていないバージョンのnpmパッケージを使用していないことを確認することが重要です。
侵害のインジケーター
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
- 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db
- hxxps://webhook[.]site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7
その他の資料
- Sha1-Hulud 2.0 Supply Chain Attack: 25K+ npm Repos Exposed | Wiz Blog
- Live Updates: Sha1-Hulud, The Second Coming - Hundreds of NPM Packages Compromised
- Sha1-Hulud: The Second Coming - Zapier, ENS Domains, and Other Prominent NPM Packages Compromised - StepSecurity
- 内訳: 広範なnpmサプライチェーン攻撃により、数十億の週間ダウンロードが危険に - パロアルトネットワークス