サイトアイコン 酒呑ガジェット

【緊急速報】npm史上最悪のワーム型攻撃「Shai-Hulud」が500以上のパッケージを侵害!CrowdStrikeも被害、JavaScriptコミュニティに激震!

【緊急速報】npm史上最悪のワーム型攻撃「Shai-Hulud」が500以上のパッケージを侵害!CrowdStrikeも被害、JavaScriptコミュニティに激震!

2025年9月15日の夜、JavaScriptコミュニティに衝撃が走りました。npmエコシステム史上初となる自己増殖型ワーム「Shai-Hulud」が発見されたのです。このマルウェアの名前はSF小説『デューン』に登場する巨大な砂虫から取られた名前です。攻撃者はまるで砂漠を這う巨大な虫のように、npmパッケージの世界を静かに、しかし確実に侵食していきました。この攻撃が恐ろしいのは、人間の手を借りずに自動的に拡散する点です。一度環境が感染すると、ワームは管理者の公開権限を利用して自動的に拡散を続ける。従来のマルウェアとは一線を画す、新たな脅威の誕生でした。

Shai-Huludの感染メカニズムと自己増殖の手法

最初の感染は2025年9月14日17時58分50秒(UTC)に確認されました。RXNTENパッケージのバージョン0.0.3が最初の犠牲者となり、そこから感染は爆発的に広がりました。わずか1分以内にJon Rules Engine、Simplified React、JSON Schema Form、Conditional JSといったパッケージが次々と感染しました。ワームの動作は極めて巧妙です。まず感染したパッケージに「bundle.js」という3MB以上の巨大な悪意のあるJavaScriptファイルを注入します。このファイルのSHA256は「46FAFA…」で、複数の感染ファイルで同じハッシュが使用されました。

スクリプトが実行されると、開発者のマシンやCI環境から認証トークンを収集し始めます。ワームは正規のセキュリティツールであるTruffleHogを悪用し、GitHub個人アクセストークン(GH…)、AWSアクセスID、AWS秘密キー、Google Cloud Platformサービス認証情報、Azureクレデンシャル、npmトークンなどを探し出します。さらにAWS、Google Cloud、Azureのメタデータエンドポイントにもクエリを送信し、短期間有効なクラウドビルドエージェント内の認証情報も収集します。収集した情報はBase64エンコードされ「data.json」というファイルに格納されます。そして被害者のGitアカウントを使用して「Shai-Hulud」という名前の公開リポジトリを作成し、そこにアップロードします。この公開リポジトリにより、攻撃者は被害者の認証情報に簡単にアクセスできるようになります。

このワームの最も恐ろしい特徴はその自己増殖能力です。ワームは「npm module.updatePackage」という関数を使用して感染プロセスを自動化します。まず新しいターゲットのパッケージターボールをダウンロードし、package.jsonファイルを修正して悪意のあるbundle.jsスクリプトを注入します。その後アーカイブを再パッケージ化し、盗んだトークンを使用してnpmレジストリに再公開します。ワームはnpmトークンなどの環境変数を探し、侵害されたアカウントが管理する他のパッケージへの拡散を続けるための認証情報を見つけます。これにより、一人の開発者が感染すると、その開発者が管理する全てのパッケージが自動的に感染する可能性があります。さらに巧妙なのはGitHub Actionsを使用した永続化メカニズムです。ワームは「.github/workflow/hfw.yml」というワークフローファイルを作成し、全てのアクセス可能なリポジトリにプッシュします。このワークフローはプッシュイベントでトリガーされ、リポジトリの全てのシークレットをJSON形式でシリアライズし、攻撃者のWebHookサイトポイントに送信します。ワームはまた、被害者のプライベートリポジトリを公開リポジリに変換する機能も持ちます。リポジリ名に「-migration」サフィックスを追加し、説明を「Shai-Hulud migration」に変更します。これにより、プライベートなソースコードやそこにハードコードされた秘密情報が公開される可能性があります。

被害規模と時系列での展開、そして主要な被害パッケージ

攻撃の展開は段階的かつ組織的でした。9月14日の最初の感染後、小規模なバースト攻撃が発生。その後、25以上のパッケージを標的とした最初の大規模バーストが発生し、新しいマルウェアが使用されました。9月15日に入ると攻撃はさらに激化し、複数のハッシュが登場。特に9時16分と10時41分のバーストでは100以上のパッケージが感染しました。その後も攻撃は続き、@peraltaや@kingsfactory、@nativescript/community、@nstudioなどの名前空間下の多数のパッケージが次々と感染しました。

最も注目すべき被害者の一つは、週200万回以上ダウンロードされている「@rol/2color」パッケージです。バージョン4.1.1と4.1.2が悪意のあるコードで汚染されました。このパッケージは色操作ライブラリーとして広く使用されており、多くのプロジェクトに影響を与えました。CrowdStrikeも大きな被害を受け、同社が管理する複数のパッケージが感染しました。セキュリティ企業として知られる同社のパッケージが侵害されたことは、攻撃の深刻さを物語っています。その他の主要な被害パッケージには、ngx-toaster(19.0.1と19.0.2)、@nativescript/community/ui-collection(6.0.6)、eslint-config-crowdstrike(11.0.2と11.0.3)などがあります。これらのパッケージはAngular、NativeScript、ESLintなどの人気フレームワークやツールに関連しており、広範な影響を及ぼしました。

調査によると、36人のGitユーザーの認証情報がShai-Huludリポジトリで公開され、8人のユーザーのプライベートリポジトリが強制的に公開されました。さらに64の追加リポジトリでShai-Huludブランチが作成されており、多くの場合、ワークフローログにGitHubトークン、npm認証情報、Atlassianキー、Datadog APIなどの機密情報が露出していました。

対策と復旧手順:信頼と検証、そして連帯の教訓

開発者と組織が取るべき対策は包括的かつ迅速でなければなりません。まず、感染したパッケージを完全に削除する必要があります。npm uninstallコマンドで悪意のあるパッケージを削除し、`rm -rf node_modules && npm cache clean –force` でキャッシュをクリアします。その後、既知の安全なバージョンに固定するため、`npm install @@ –save –exact` コマンドを使用します。次に、全ての認証情報を直ちにローテーションする必要があります。これにはnpmトークン、GitHub個人アクセストークン、GitHub Actions secret、SSHキー、AWSアクセスID、AWS秘密キー、Google Cloud Platform認証情報、Azureクレデンシャル、APIキー、データベース接続文字列など、シークレット管理サービスに保存されている全ての秘密情報が含まれます。

GitHubリポジトリの監査も重要です。「Shai-Hulud」という名前のリポジトリや「Shai-Hulud migration」という説明を持つリポジリ、あるいは「-migration」サフィックスがついたリポジリを探します。また、`git ls-remote –heads origin | grep shai-hulud` コマンドで疑わしいブランチを検索し、見つかった場合は `git push origin –delete shai-hulud` で削除します。クラウドログやその他の監査を確認し、`BatchGetSecretValue`や`GetSecretValue`などの不審なAPI呼び出しがないか調査します。

Shai-Huludは確かに恐ろしい存在でした。しかしこの虫は私たちに大切なことを教えてくれました。信頼は美しいが、それだけでは脆い。検証という鎧をまとわなければ、砂漠の虫に飲み込まれてしまう。そして何より、危機に直面した時、私たちは決して一人ではないということを。デジタルの砂漠に新しい朝が登る。虫が去った後の砂には無数の足跡が刻まれていました。それは逃げ惑った後ではなく、立ち上がり、共に歩み始めた希望の足跡でした。

AIの所感

npmエコシステムを襲ったワーム型攻撃「Shai-Hulud」は、サプライチェーン攻撃の恐ろしさと、オープンソースソフトウェアの脆弱性を改めて浮き彫りにしました。自己増殖能力と認証情報の窃取、そしてプライベートリポジトリの公開という巧妙な手口は、開発者コミュニティに大きな衝撃を与えたことでしょう。CrowdStrikeのようなセキュリティ企業までもが被害に遭ったという事実は、この攻撃の深刻さを物語っています。しかし、この危機を通じて、世界中の開発者たちが国境や言語の壁を越えて連携し、問題解決に取り組んだことは、オープンソースコミュニティの強靭さと連帯の重要性を示すものでした。この一件は、信頼だけに依存せず、常に検証を怠らないこと、そして万が一の事態に備えて認証情報の管理を徹底することの重要性を、私たちに強く訴えかけています。デジタル社会におけるセキュリティは、技術的な対策だけでなく、コミュニティ全体の意識と協力によって守られるべきものであることを、Shai-Huludは教えてくれたのです。

モバイルバージョンを終了