セキュリティ研究者は、ansi-universal-uiという一見無害なnpmパッケージの内部に隠された、高度に洗練された「G_Wagon」と呼ばれるインフォスティーラーを発見しました。
ansi-universal-uiパッケージは、Webアプリケーション向けのモジュール式UIコンポーネントシステムとして説明され、洗練された説明文、プロらしいキーワード、バズワード満載のREADMEが用意されていました。
宣伝されていたUI機能は実際には一切存在せず、代わりにこのパッケージの唯一の目的は、被害者のマシン上で隠されたPythonベースのスティーラーを実行することでした。
この悪意あるパッケージが最初に注目を集めたのは2026年1月23日で、08:46 UTCに自動マルウェア検知によってフラグが立てられました。
その時点で攻撃者はすでに2日間にわたりバージョンを反復し、テスト用ハーネスを段階的に完全に武器化されたサプライチェーン攻撃へと変貌させていました。
内部的には、ansi-universal-uiはNode.jsのドロッパーとして機能し、自身に埋め込まれたPythonランタイムをダウンロードしてから、難読化されたPythonペイロードを実行します。
初期バージョンには、単純なメッセージを出力するだけのダミーのpy.pyスクリプトしか含まれておらず、攻撃者が本物の悪性ロジックを展開する前に実行チェーンを検証できるようになっていました。
検知を減らすため、攻撃者はnpmのtarライブラリの使用から、システムのtarコマンドを直接呼び出す方式へ切り替え、依存関係のフットプリントを減らして自動スキャンで疑われにくくしました。
安定すると、後期バージョンではローカルスクリプトの実行をやめ、Appwriteのストレージバケットからライブのペイロードを取得するようになり、npmパッケージを事実上リモート制御のローダーへと変えました。
バージョン履歴は、サプライチェーン攻撃のライブ開発ログのように読めます。1日目はインフラのテストに注力し、postinstallフックの追加、リダイレクトのバグ修正、リモートコンテンツを確実にダウンロードして展開できるようにすることが行われました。
2日目は完全な武器化へ移行し、攻撃者はコマンド&コントロール(C2)URL、偽のブランディング、二重実行のための自己依存、アンチフォレンジックのクリーンアップ、より現実的なログメッセージなどを導入しました。
追加の更新では強力な難読化が加えられ、C2 URLは16進エンコードされたチャンクに分割され、変数名やディレクトリ名はグラフィックスやレイアウトのコードのように聞こえる名称へ変更され、実在するUIレンダリングエンジンを模倣するための囮の「LayoutCompute」クラスが挿入されました。
最後のクイックフィックス版では、これらの見た目上の変更によって導入された壊れたパスが修正され、攻撃者がリアルタイムで積極的にテストとデバッグを行っていたことが示されています。
Pythonペイロードが実行されると、G_Wagonはまずユーザーのホームディレクトリ内の.gwagon_statusファイルを確認し、実行回数を追跡して同一ホストでの繰り返しのデータ窃取を回避します。
macOSでは、Keychainから暗号化キーを抽出し、OpenSSLを使ってブラウザデータベースからログインデータを復号します。
最も深刻な機能は、暗号資産ウォレットに焦点を当てている点です。G_Wagonは、MetaMask、Phantom、Coinbase Wallet、Trust Wallet、Ledger Live、Trezor、Exodusなどを含む、100以上のブラウザウォレット拡張機能をスキャンします。
拡張機能のデータディレクトリ全体をコピーし、攻撃者がEthereum、Solana、Cosmos、Polkadot、Cardano、TON、Bitcoin Ordinals、その他のエコシステムにまたがる資産を乗っ取るために必要なものをすべて入手できる可能性があります。
ブラウザやウォレットにとどまらず、このスティーラーはクラウドおよびインフラの認証情報も探索します。
AWS、Azure、Google CloudのCLI向けの設定・認証情報ファイル、SSH鍵、kubeconfigファイルを標的にし、単一の侵害マシンを足掛かりにクラウド環境全体へ横展開できる状態にします。
Discordトークン、Telegramのデータディレクトリ、Steamの認証ファイルも収集され、アカウント乗っ取りやさらなる悪用を可能にします。
このマルウェアは、大きなアーカイブを確実にアップロードできるようチャンク化して分割でき、耐障害性のために異なる地域にあるプライマリおよびバックアップのC2エンドポイントの両方を維持します。
特に高度な機能として、Pythonコード内に大きなbase64およびXORエンコードされたブロブとして隠された、埋め込みのWindows DLLがあります。
復号後、マルウェアはNtAllocateVirtualMemory、NtWriteVirtualMemory、NtProtectVirtualMemory、NtCreateThreadExといった低レベルのNTネイティブAPIを介してこのDLLをブラウザプロセスにインジェクトし、その後、エントリポイントとしてエクスポートされたInitialize関数を呼び出します。
ansi-universal-uiをインストールした開発者は、直ちにプロジェクトから当該パッケージを削除し、node_modulesディレクトリを削除したうえで、侵害されたものとして扱うべきです。
ブラウザに保存されたすべてのパスワードをローテーションし、ブラウザベースの暗号資産ウォレットのシークレットを無効化して再生成し、クラウドプロバイダーの認証情報をローテーションし、SSH鍵を再生成し、DiscordおよびTelegramのセッションを無効化してください。
翻訳元: https://cyberpress.org/g_wagon-npm-credential-heist/