汚染されたAxiosパッケージがPhantom Dependencyを通じてクロスプラットフォームマルウェアを拡散

ハッカーはAxiosのリード保守者のnpmアカウントを乗っ取りました。彼らはこれを利用して、macOS、Windows、Linuxシステムにクロスプラットフォームのリモートアクセストロージャン(RAT)を静かにインストールする2つの悪意のあるリリースをプッシュしました。

Axiosはキャッシュ、バックエンド、CI/CDパイプライン全体に深く組み込まれており、JavaScriptエコシステムで最も広く使用されているHTTPクライアントの1つで、npm上での週間ダウンロード数は1億を超えています。

これらのリリースは公式GitHubリポジトリを通じて構築またはタグ付けされたことはなく、npmにのみ存在しており、Axiosの通常のGitHub Actionsベースのリリースプロセスからの逸脱を直ちに示唆しています。公式GitHubリポジトリ

これらのバージョンをカバーする柔軟なバージョン範囲でnpm installを実行した者は誰でも、開発、CI/CD、または本番環境で埋め込まれたマルウェアを実行する可能性がありました。

報告書によると、2026年3月30~31日、攻撃者は保守者のnpmアカウントの盗まれた認証情報を使用して、axios 1.14.1と0.30.4という2つの汚染されたバージョンを公開することで、このリーチを悪用しました。

汚染されたAxiosパッケージ

悪意のあるAxiosビルドは、plain-crypto-js@^4.2.1という単一の新しい依存関係を導入しました。これはAxiosソースコードに表示されず、実行時にはインポートされず、インストール時の副作用のためだけに追加された典型的な「Phantom Dependency」としてマークされています。

Image

plain-crypto-jsバージョン4.2.0は、最初は信頼とパッケージ履歴を構築するための良好なおとりとして公開され、その数時間後に、RAT(リモートアクセストロージャン)ドロッパーとして機能するpostinstallフック(node setup.js)を追加した武装された4.2.1リリースが続きました。

自動化されたnpmセキュリティスキャナーは、公開されてから数分以内にplain-crypto-jsと悪意のあるAxiosバージョンに素早くフラグを立てました。その結果、npm管理者は危険にさらされたパッケージを削除し、関連するトークンを数時間以内に取り消しました。

短い露出時間にもかかわらず、複数のセキュリティベンダーからのテレメトリーは、政府、金融、医療、技術、製造業を含むセクターの組織が影響を受けたことを示しています。

正当なAxios 1.xリリースは通常、GitHub Actionsを介してnpmのOIDC信頼できるパブリッシャーを使用して公開され、cryptographicallyに検証されたCIワークフローに結合されたnpmパッケージです。

対照的に、axios 1.14.1と0.30.4は、盗まれたnpmアクセストークンを使用して手動でプッシュされました。trustedPublisherメタデータやgitHeadはなく、GitHubリポジトリに対応するコミット、タグ、またはリリースが残りませんでした。

侵害が検出されたら、プロジェクトの協力者が、管理者レベルのアカウントを制御している攻撃者が、GitHubの開示問題さえも削除またはピン留めを外すことができたことを報告しました。これにより、インシデント対応と通信がより困難になりました。

悪意のある[email protected]パッケージのsetup.jsスクリプトは非常に難読化されており、すべての機密文字列をエンコードされた配列に保存し、実行時に階層化されたXORとbase64変換を使用してデコードし、静的分析を回避します。

インストール時に、スクリプトはコアNodeモジュール(fs、os、child_process)を動的に必要とし、ホストプラットフォームに指紋を付け、キャンペーンIDパラメータ(6202033)を使用してsfrclak[.]com:8000を指すHTTPコマンド&コントロールURLを構築します。

macOSでは、AppleScriptを書き込んで実行します。これはバイナリRATを/Library/Caches/com.apple.act.mondにダウンロードしてバックグラウンドで起動します。Windowsでは、VBScriptと名前変更されたPowerShellバイナリ(wt.exe)をチェーンして、ファイルレスなPowerShell RATを実行します。Linuxでは、Python RATを/tmp/ld.pyに取得し、nohupを介してそれを実行し、npm処理を生き残るためにPID 1に孤立させます。

Image

3つのブランチはすべて同じC2インフラストラクチャへのHTTP POSTトラフィックを使用しており、リクエストボディはnpm関連パスを模倣しており(たとえば、packages.npm.org/product0–2)、ログと表面的なレビューに混ぜ込むためのものです。

フォレンジック対策とPhantom Traces

RATの起動直後、setup.jsは自身を削除し、postinstallフックを含む悪意のあるpackage.jsonを削除し、クリーンなスタブマニフェスト(package.md)をpackage.jsonにリネームし、node_modules/plain-crypto-js内の明らかなオンディスク痕跡を効果的に消去します。

この自己破壊シーケンスのため、インシデント後のファイルシステム検査はしばしば無実に見えるplain-crypto-jsパッケージのみを示しており、実行時テレメトリ、ロックファイル履歴、およびネットワークログがより信頼できる侵害の指標です。

セキュリティ研究者は、影響を受けたウィンドウ中にAxiosを解決した環境内のnode_modules/plain-crypto-jsの単純な存在が侵害の強い信号であることに注意しています。これは、合法的なAxiosバージョンがこのパッケージに依存しないからです。

その後の調査は、同じplain-crypto-jsベースのドロッパーとsfrclak[.]com C2インフラストラクチャを他のnpmパッケージにリンクしました。これには、悪意のあるAxiosビルドがnode_modulesディレクトリに事前に組み込まれたフォークとバンドルされた配布が含まれています。

このキャンペーンは複数のMITRE ATT&CKテクニック(ソフトウェアサプライチェーン侵害、難読化されたスクリプト、マスカレード、ファイルレスなPowerShell、およびフォレンジック対策クリーンアップ)に明確にマップされており、その洗練さと運用計画を強調しています。

ディフェンダーは、組織にAxiosを安全なバージョン(1.14.0または0.30.3など)にピン留めし、plain-crypto-jsの残りをすべて削除し、アーティファクトが見つかった場合は既知の良いイメージから影響を受けたシステムを再構築し、すべての露出されたシークレットをローテーション、CI/CD内でnpm ci –ignore-scriptsを厳密な出力監視で実施することを促すように要求しています。これは同様の攻撃に対する継続的なコントロールです。

翻訳元: https://gbhackers.com/poisoned-axios-package/

ソース: gbhackers.com