180以上のNPMパッケージが、新たなサプライチェーン攻撃の被害に遭いました。この攻撃では自己増殖型マルウェアが秘密情報を窃取し、GitHubに公開し、プライベートリポジトリを公開リポジトリに変更します。
この攻撃の一環として、ハッカーは40以上の開発者アカウントを侵害し、700以上の悪意あるパッケージバージョンをNPMレジストリに公開しました。
この攻撃は、LokaのシニアソフトウェアエンジニアであるDaniel dos Santos Pereiraによって9月15日に報告されましたが、9月14日に十数個未満の悪意あるパッケージが公開されたことから始まりました。その日の終わりまでに、約50のパッケージバージョンが公開されていました。
Ox Securityの警告によると、9月16日までに、公開リポジトリ名からShai-Huludと名付けられたこの攻撃は、180以上のパッケージに被害を与えました。
影響を受けたパッケージには、@ctrl/tinycolor(週2百万以上のダウンロード)、ngx-bootstrap(週30万ダウンロード)、ng2-file-upload(週10万ダウンロード)、および複数のCrowdStrike NPMパッケージ(即時削除済み)が含まれます。
これらのパッケージには、TruffleHog秘密スキャニングツールを取得して秘密情報を特定・窃取し、環境変数やIMDS経由で公開されているクラウドキーを収集するためのpost-installスクリプトが仕込まれていました。
このスクリプトは収集した認証情報を検証し、GitHubトークンが特定された場合、それを利用して公開リポジトリを作成し、秘密情報をそこにダンプします。
さらに、各リポジトリから秘密情報をハードコーディングされたWebhook(許可されたコールバック数を超えたため無効化済み)に流出させるGitHub Actionsワークフローをプッシュし、プライベートリポジトリを「Shai-Hulud Migration」とラベル付けして公開リポジトリに移行します。
サイバーセキュリティ企業Socketは、GitHub上でShai-Hulud Migrationラベルが付いた700以上の公開リポジトリを特定しており、これらはすべて攻撃が発生した時期に作成されています。
被害者の侵害されたアカウントを使って作成された公開GitHubリポジトリに盗まれた秘密情報を公開する手口は、数週間前のs1ngularityサプライチェーン攻撃でも見られたパターンです。実際、セキュリティ企業Wizによると、Shai-Huludの最初の被害者はs1ngularity攻撃の既知の被害者でした。
この攻撃を特徴づけているのは、特定されたNPMトークンを使い、侵害されたメンテナーが管理するパッケージを列挙・更新して、悪意あるpost-installスクリプトを注入する悪質なコードです。
「この攻撃は自己増殖型ワームです。侵害されたパッケージが被害者環境内で追加のNPMトークンを見つけると、アクセスできるすべてのパッケージに自動的に悪意あるバージョンを公開します」とWizは述べています。
StepSecurityによる技術分析によれば、Shai-Hulud攻撃フローのワームはLinuxおよびmacOSの実行環境を標的とし、意図的にWindowsマシンを除外しています。
JFrogの報告によると、同じデータ窃取型ペイロードの複数のバリエーションが侵害されたパッケージの悪意あるバージョンに注入されています。コードはGitHub、NPM、AWS、Google Cloudの認証情報、さらにAtlassianキーやDatadog APIキーも標的にしていました。
「主な機能は同じですが、いくつかのバージョンにはわずかな違いがあり、攻撃者がキャンペーン中に段階的な調整を行っていたことが示唆されます。例えば、一部のバージョンでは‘Shai-Hulud’リポジトリを非公開にして発見を防いでいます。別のバージョンではAzure認証情報の窃取も試みています」とJFrogは述べています。
GitGuardianによると、この攻撃で278件の秘密情報が公開漏洩し、そのうち90件はローカルマシンから、188件は悪意あるワークフローを通じて侵害されました。ほとんどは迅速に無効化されましたが、主にGitHub APIトークンを中心に数十件が依然として有効です。
セキュリティ企業は、悪意あるコードの自己拡散能力により、キャンペーンが今後数日間は継続する可能性が高いと警告しています。
感染を避けるため、ユーザーはNPMで新しいバージョンがあるがGitHubにはないパッケージに注意し、依存関係を固定して予期しないパッケージ更新を避けることが推奨されています。
Wizによると、新たなShai-Huludリポジトリの作成は観測されていませんが、ワームは被害者メンテナーの認証情報を使って新しいパッケージを公開することで拡散を自動化しているため、どの侵害アカウントも攻撃再開に利用される可能性があります。
「このサイクルにより、マルウェアはメンテナーがアクセスできるすべてのパッケージを継続的に感染させることができます。公開された各パッケージが新たな配布経路となり、誰かがインストールするとワームが実行・複製され、エコシステム内にさらに拡散します」とセキュリティ企業Aikidoは指摘しています。
WizはShai-Huludを「これまで観測された中で最も深刻なJavaScriptサプライチェーン攻撃の一つ」と呼び、ReversingLabsはNPMエコシステムのパッケージ間依存関係がキャンペーンの影響を増幅させていると警告しています。
ReversingLabsによると、影響を受けた関係者には「テック企業の創業者やCTO、ソフトウェア開発サービスを提供する企業、非営利団体で働く開発者、ギャンブル用ハードウェア・ソフトウェアやオフィス開発スイートを構築する企業のテックリード、AIファースト企業の開発者、セキュリティベンダー(大手EDRベンダーを含む)、学生開発者、そしてNPMを日常的に利用するその他の人々」が含まれます。
潜在的な侵害を検出するため、NPMユーザーは自分のGitHubアカウントで新たに作成されたリポジトリやブランチを確認し、「Shai-Hulud」や「Shai-Hulud Migration」と名付けられ、かつ自組織名を含む公開リポジトリを検索し、GitHub監査ログを確認し、不審なAPIコールを探すことが推奨されています。
侵害の兆候を確認した場合、ユーザーはすべてのGitHubおよびNPMトークン、SSH・APIキー、環境変数の秘密情報を失効・再発行し、リポジトリ内のすべてのパッケージを再インストールする必要があります。
Shai-Huludは、s1ngularity攻撃やJosh Junon(Qix)の最近の侵害(18個のNPMパッケージのメンテナーで、合計週25億以上のダウンロード実績)に続く、NPMエコシステムを標的とした3つ目の大規模サプライチェーン攻撃です。
「これらの攻撃は例外ではなく、攻撃ベクトルが有効である限り今後も続きます。組織は自社のソフトウェア環境を正確に把握し、問題発生時に迅速に対応できるよう備える必要があります。そのためには依存関係の監査、SBOM(ソフトウェア部品表)の導入による透明性確保と迅速な脆弱性評価、特権アクセス管理による強力な認証・アクセス制御の徹底、異常行動の監視、そして秘密情報の保護により、盗まれた認証情報が悪用されないようにすることが重要です」とKeeper SecurityのCISO、Shane Barney氏は述べています。
関連記事: 高価値NPM開発者が新たなフィッシングキャンペーンで侵害
関連記事: AIサプライチェーン攻撃手法がGoogle・Microsoft製品に対して実証