ライブラリを依存関係として記載するnpmプロジェクトがほぼ175,000個存在し、この攻撃は莫大なカスケード効果をもたらし、侵害されたパッケージがいかに迅速にエコシステム全体に拡がるかを示しています。
攻撃者は、広く使用されているJavaScript HTTPクライアントライブラリであるAxiosのリードメンテナーのnpmアカウントを侵害し、開発者マシンにクロスプラットフォームリモートアクセストロイの木馬をデプロイする悪質なバージョンを公開するために使用しました。本インシデントは、Axiosのおよそ1億のウィークリーダウンロード数とフロントエンドフレームワーク、バックエンドサービス、および無数のエンタープライズアプリケーションでの存在を考えると、記録上最大の影響を持つnpm供給チェーン攻撃を示しています。
幸いなことに、改ざんされたバージョンである[email protected]と[email protected]は、公開から数分以内にnpmレジストリを監視する複数のセキュリティ企業によって検出され、2~3時間以内にnpmチームによって悪質なパッケージが削除される迅速な対応が始まりました。ただし、このプロジェクトが受ける高いダウンロード活動を考えると、短い時間枠でも多数の開発者環境に影響を与えるのに十分でした。
クラウドセキュリティ企業Wizによると、Axiosはクラウドおよびコード環境の80%で使用されており、同社は影響を受けた環境の約3%でマルウェアの実行を観察しました。セキュリティ企業Snykの研究者は、「ライブラリの人気を考えると、2時間の悪質なウィンドウでさえ、極めて広範な影響を示す」と指摘しました。npm上の他のプロジェクトのほぼ175,000個がAxiosを依存関係として記載しており、これはエコシステム全体を通じて莫大なカスケード効果をもたらしました。
この攻撃に先立ち、過去数週間にわたってさまざまなパッケージリポジトリの複数のオープンソースプロジェクトに影響を与えた一連の供給チェーン攻撃が発生しており、そのほとんどはTeamPCPとして知られるグループに属しています。ただし、Google Threat Intelligence Group(GTIG)はAxios攻撃をUNC1069として追跡する北朝鮮の脅威行為者に起因するものとして特定しました。
「北朝鮮のハッカーは供給チェーン攻撃の経験が豊富であり、従来は暗号資産を盗むために使用してきた」とGTIGのチーフアナリストであるJohn Hultquistは述べました。「本インシデントの全範囲はまだ明確ではありませんが、侵害されたパッケージの人気を考えると、広範な影響をもたらすと予想しています。」
Snyk研究者の分析では、攻撃に関与する技法の高度さも指摘されています。
「攻撃者は有意義な運用上の高度さを示し、悪質な依存関係を事前にステージング、『クリーン』なバージョン履歴を使用、ドロッパーを二重に難読化、プラットフォーム固有のRATを構築、フォレンジック対策として自己削除を実装しました」とSnyk研究者は彼らのレポートで述べています。「これは機会主義的ではありませんでした。」
攻撃がどのように展開されたか
攻撃者はAxios攻撃の準備を約18時間前に開始し、nrwiseという名のアカウントが[email protected]というパッケージを公開しました。これはレジストリ履歴と信頼性を確立するためにデザインされたクリーンなおとり物でした。悪質なペイロードは同じ日の後に到着し、[email protected]に含まれていました。これは、異なるパッケージから依存関係として取得された場合にドロッパースクリプトを実行するpostinstallフックを含んでいました。
3月31日のUTC午前0時をすぐに過ぎて、Axiosパッケージの新しいバージョンである[email protected]がnpmで公開され、その39分後に[email protected]が公開されました。どちらもpackage.jsonファイルに[email protected]を依存関係として記載していますが、残りのコンポーネントは変更されていません。
マニフェストに表示されるが、コードベース内での使用またはインポートがゼロのパッケージはファントム依存関係と呼ばれ、侵害の高い信頼度インジケータです。StepSecurityの研究者によると。別のインジケータは、これらのバージョンがnpmにのみ表示され、プロジェクトのGitHubレポジトリではタグ付きリリースとして表示されなかったことです。
Axiosの正当な1.xリリースはnpmのOIDC Trusted Publisherメカニズムを使用するように構成されていましたが、1.14.1リリースはリポジトリ内の対応するコミットまたはタグなしに盗まれたトークンを介して手動で公開されました。
GitHubのコメントで、プロジェクトのプリンシパルメンテナーであるJason Saaymanは、v1.xが信頼性のある公開を構成していたが、v0.xブランチはまだレガシーな長期トークンに依存していることを認めました。コミュニティメンバーはさらに、v1.x公開ワークフローが依然としてNODE_AUTH_TOKENをnpmに渡していることを指摘しました。これは両方が存在する場合にOIDCより優先される、長期トークンがv1.xにも使用されていたことを意味します。
クロスプラットフォームマルウェア
難読化され暗号化されたpostinstallスクリプトは、攻撃者によって前日に登録されたドメイン上のコマンドアンドコントロール(C2)サーバに接続し、プラットフォーム固有の第2段階RAT ペイロードをダウンロードしました。
macOSでは、バイナリは/Library/Caches/com.apple.act.mondに書き込まれ、codesign —force —deep —sign経由で注入されたペイロードに自己署名でき、macOS Gatekeeper保護をバイパスしています。マルウェアはシステムにフィンガープリントを作成し、ホスト名、ユーザー名、macOSバージョン、ブートおよびインストール時刻、CPUアーキテクチャ、および実行中のプロセスを収集し、その後60秒ごとにC2サーバに接続します。
Windowsマシンでは、ペイロードはWindows Terminalを装う%PROGRAMDATA%\wt.exeにコピーされたPowerShellスクリプトです。マルウェアは「MicrosoftUpdate」という名前のレジストリRunキーと再ダウンロードバッチファイルを通じて永続性を確立します。一方、Linuxシステムは/tmp/ld.pyとして保存され、nohup python3経由で実行されるPythonスクリプトを受け取ります。
RATは4つのコマンドをサポートしています。追加バイナリをデプロイするためのpeinject、シェルまたはAppleScriptコードを実行するためのrunscript、ディレクトリ列挙用のrundir、自己終了用のkillです。
セキュリティ企業Socketの研究者によると、実行後、マルウェアはsetup.jsを削除し、postinstallフックを含む悪質なpackage.jsonを削除し、バージョン4.2.1ではなく4.2.0を報告するクリーンなコピーで置き換えることによって、その痕跡を消そうとします。これは、影響を受けたプロジェクトディレクトリでnpm listを実行するユーザーが[email protected]を表示され、攻撃に先立つインストールバージョンであると誤解させる可能性があります。
検出とメンテナー対応
npmを監視しているセキュリティ企業は、[email protected]がnpmで公開されてから数分以内にこれをフラグし、npmレジストリチームによるパッケージ削除を含む一連の対応をトリガーしました。ただし、Axiosプロジェクト自体は、インシデントがリードメンテナーの夜間に発生したため、問題を抑制するのに困難がありました。
プロジェクトのコアコラボレーターはGitHubでコミュニティが報告した問題にも数分以内に対応しましたが、彼の権限は侵害されたトークンを持つメンテナーのそれより低かったです。
これは、プロジェクト貢献者がすぐに侵害に気づいたとしても、攻撃者は盗まれたトークンを通じてより高い特権を持つ可能性があり、損害管理の試みを遅くする可能性があるため、オープンソースプロジェクトが直面する可能性のあるインシデント対応のギャップを浮き彫りにしています。
最近のTrivyの侵害では、攻撃者がボットのスパムコメントでGitHubイシューをあふれさせ、メンテナーがコミュニティに対応および通信する難しさを増しました。
より多くの侵害に備える
Axios インシデントのカスケード効果は、依存関係スキャンツールが悪質なバージョンを取得していた何百もの下流プロジェクトをフラグしたときに見えるようになりました。1人のユーザーは、ロックファイルでplain-crypto-jsを検出した後、50以上のリポジトリに警告を投稿しました。一方、別のユーザーは個人ブログからエンタープライズアプリまで、さらに数十個を特定しました。
これは、侵害がわずか数時間以内に検出されたとしても、人気のあるnpmパッケージの侵害がいかに迅速にエコシステム全体に拡がるかを示しています。
組織は、悪質なバージョンについてロックファイルとインストール済み依存関係を直ちに監査する必要があります。悪質なバージョンがインストールされた場合、開発環境は完全に侵害されていると想定してください。セキュリティチームは影響を受けたシステムを分離し、npmトークン、クラウドプロバイダーキー、SSH秘密鍵、CI/CDシークレットなど、それらに存在するすべての認証情報をローテーションする必要があります。
「その場でローテーションしないでください。失効させて再発行してください」とSnyk研究者はアドバイスしました。「侵害されたシステムをクリーンアップしようとしないでください。既知のクリーンなスナップショットから再構築してください。」
長期的には、組織はCI/CDパイプラインでnpm ci —ignore-scriptsを実行して、自動ビルド中にpostinstallフックが実行されるのを防ぎ、npmのminimumReleaseAge設定などのパッケージエージポリシーを検討する必要があります。これは開発チームに最小年齢を持たないパッケージのインストールをブロック機能を与え、この攻撃は「plain-crypto-js」がAxiosの依存関係ツリーに取り込まれる前に24時間未満存在していたため、ブロックされていたはずです。
Claude CodeやOpenAI Codexなどのデスクトップアプリケーションを通じてエンタープライズ環境でAIツールを使用することは、開発者環境を超えて影響を拡張しています。これらのツールはますます非開発者によって彼らの仕事のワークフローで使用されており、LLMはCLIツール用のnpmおよびPyPIエコシステムに大きく依存しています。