Shai-Hulud Worm 2.0への対処:npmサプライチェーン侵害に対するElasticの最新対応

皆さん続編はお好きですよね?11月24日(月)から、Shai-Hulud Wormが戻ってきて2.0にアップデートされたというニュースがソフトウェア開発コミュニティで話題になっています。コミュニティは対応モードに入っていますが、Elasticも例外ではありません。Elastic製品にはNodeパッケージマネージャー(npm)が付属していませんが、当社のソフトウェアは、多くのソフトウェアと同様に、ビルド中にnpmを使用してnpmjs.comパッケージレジストリからパッケージを取得します。

このブログでは、増え続ける一方の侵害パッケージによる脅威を監視、軽減するためのElasticの対策について順を追って説明します。また、「Shai-Hulud」の今回の復活劇に伴い、当社が取った防止策、検出ルール、探索クエリ、推奨事項も共有します。 

進化した脅威を理解する:Shai-Hulud 2.0

npmエコシステムは、その規模の大きさゆえに悪意のあるアクティビティの格好の標的となっています。2025年9月の最初の攻撃に続き、2025年11月にはGitHubリポジトリの説明文で使用されているキャンペーンマーカーから「Shai-Hulud: The Second Coming」と呼ばれる悪意のあるnpmワームの新たな亜種が出現し、活発にデータ漏洩を行っています。このワームは、AsyncAPI、Zapier、PostHog、Postmanなどの人気プロジェクトを含む数百ものパッケージを侵害しています。

最初の亜種と似ているのは、npmパッケージが自己複製型のマルウェアに感染していることです。しかし、Shai-Hulud 2.0はsetup_bun.jsというファイルでbunをインストールし、それを使って悪質なコードを含むbun_environment.jsを実行するという点で最初のバージョンとは異なります。次に、ランダムな名前のGitHubリポジトリを作成して、盗まれたデータを漏出させ、多くの場合、1人の被害者のデータを「被害者間流出」と呼ばれる別の関係のない被害者に関連するリポジトリに公開します。新しく作成されたGitHubリポジトリには「Sha1-Hulud: The Second Coming」という説明があります。

つまり、自分のリポジトリを検索するだけでは、環境から漏洩したデータを発見できない可能性があるということです。さらに、Shai-Huludは20個のnpmパッケージへの感染に限定されなくなりました。最大100個のnpmパッケージに感染し、GitHubまたはnpm認証情報を使用して認証できない場合、ユーザーのホームディレクトリが消去されます。

Elasticの対応

最初のShai-Huludインシデントの後に実装された教訓とメカニズムを利用して、Elasticは即時かつ包括的な防御策を展開することができました。

  • 依存関係インベントリ:Elasticはソフトウェアコンポジション分析(SCA)ツールを使用して製品を継続的にスキャンしており、どのパッケージがどこで使われているかをすばやく把握できます。

  • 脅威インテリジェンス:複数の脅威インテリジェンスフィードを使用して、増え続ける悪意のあるパッケージのリストを依存関係インベントリと照合し、アラートをトリガーします。

  • Npmjsのベストプラクティスと制限:9月のShai-Hulud 1以降、ElasticチームはTrusted Publisherに移行し、公開を継続できるようになっています。残っていたトークンは取り消され、長寿命トークンでの公開は不可能になりました。

  • 依存関係の最小経過期間:自動化において、パッケージの最小リリース経過期間(クールダウン期間)を実装しました。これにより、新しいパッケージバージョンは、リリースされてから14日間経過するまで自動的に取得されないようになっています。

  • エンドポイントスキャンの実装:Elastic AgentのOSQuery統合を使用してElasticのノートパソコンにインストールされている既知の侵害されたnpmパッケージの継続的なスキャンを行いました。

  • 設定不要(OOTB)検出ルール:Elastic Security Labsは、侵害されたパッケージをインストールし実行しているシステムの特定を支援するための設定不要のElastic Security検出ルールをすでに提供しています。以下に挙げた保護策の詳細をご紹介しており、ご自身の脅威ハンティングにご活用いただけます。

  • Elastic開発者に通知:Elastic開発者に対して、調査中であることを通知し、新しいnpmパッケージの更新やインストールを禁止する旨の注意喚起が送付されました。

身近に迫る「再臨」

パートナーのEntroを通じて、Elasticは、Elasticの継続的インテグレーション(CI)パイプラインがShai-Hulud 2.0マルウェアを実行し、データをGitHubの公開リポジトリに公開したことを把握しました。このパイプラインはGitOps、具体的にはElastic Cloudのオーケストレーターに使用されます。Elastic CloudのシステムやElasticのお客様への影響はありませんでした。原因は推移的依存関係であることが判明しました。迅速な対応とエンジニアリングチームとの連携により、潜在的な悪用が発生する前に脅威を封じ込め、修復することができました。

迅速な封じ込めと修復

  • 特定されたすべてのElastic GitHubリポジトリからマルウェアを含むオープンソースの依存関係を削除

  • マルウェアが実行されるパイプラインや手動プロセスを特定

  • 特定されたCI実行および影響を受けるユーザーを特定

  • これらの実行で使用可能なシークレットを特定

  • すべてのシークレット(非一時的)を更新

顧客への影響がないことを確認

  • GitHubは、Elasticが抽出したデータを公開していたリポジトリをすぐに削除しました。これには4つのファイルが含まれていました。

    • データが含まれないcloud.json

    • CIランナーの詳細、無関係のGitHubユーザー、その無関係なユーザーのGitHubトークンに関する情報が含まれたcontents.json

    • 偽陽性のシークレットが含まれたtruffleSecrets.json

    • CIランナーに関連付けられた環境変数およびビルドで使用されるシークレットを含むenvironment.json注: Elasticはこれらのシークレットを確実に無効化しました。

  • ElasticのシークレットがElasticの外部で使用されたという証拠はありません。

  • このワームがElasticのnpmパッケージに拡散したという証拠はありません。

  • このパイプラインはElastic製品には関連付けられていません。

  • Elasticの顧客には影響はありません。

ハンティングクエリ

Elastic Securityをご利用のお客様には、ご自身の環境における潜在的な脆弱性を調査することをお勧めします。以下のKQLクエリを使用すると、このサプライチェーン侵害に関連する行動を特定できます。

// IOC for the Github Self-Hosted Actions runner name
process.name:Runner.Listener and process.command_line:*SHA1HULUD*

// IOC - node/bun executing bun_environment.js
process.name:(node or bun) and process.args:*bun_environment.js

// credentials discovery using trufflehog from node/bun or node_modules related working directory 
process.name:("trufflehog" or "trufflehog.exe") and process.args:"filesystem" and process.args:"--json" and (process.parent.name : (node or bun or node.exe or bun.exe) or process.working_directory:*node_modules*)

// curl used to download GH actions runner to victim machine
process.name:(curl or or curl.exe or powershell.exe or wget or wget.exe) and process.command_line:*github.com/actions/runner/releases/download*

//docker escape via mounting the host file system and executing bash commands to tamper with the host file system
process.name:docker and process.args :("--privileged" and run) and process.args :"-v" and process.args :/\:/*  and  process.args :(bash or sh or cp)

一致の例:

セキュリティへの取り組み

セキュリティはElasticの開発ライフサイクルと運用プロセスの基盤です。新しいShai-Hulud Wormは、グローバルなソフトウェアサプライチェーンに対するサイバー脅威の持続的かつ急速に進化する性質を浮き彫りにしています。当社環境でのこのインシデントは、セキュリティチームの有効性と迅速な対応の重要性を示しています。私たちは引き続き以下の点に取り組みます。

  • 継続的な監視:システムやネットワークの24時間365日監視を行い、侵害の兆候がないか確認します。

  • 迅速な対応:セキュリティチームが新たな脅威に迅速かつ効果的に対応できるよう準備を整えます。

  • 透明性:セキュリティインシデントおよびその対策について、ユーザーおよびコミュニティに対してオープンに情報を共有します。

今後も新たな情報を監視していきます。この事象に関する新たな情報が入り次第、本記事を更新いたします。Elasticがお客様の環境の保護にどのように役立つかについての詳細は、セキュリティソリューションのページをご覧ください。

本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。