12のリリースにわたる10個の乗っ取られたnpmパッケージで、隠蔽されたJavaScriptローダーが見つかりました。これにより、今回の侵害は以前報告されていたPolinRiderの活動と関連していることが判明しました。
2026年11月4日に調査したところ、これらのリリースはEthereumのトランザクションを使ってリモートのペイロードサーバーを特定し、ダウンロードしたコードを開発環境、ビルドシステム、アプリケーション内で実行します。Sonatypeはこの発見をsonatype-2026-010515.guideとして追跡しています。
インストール時に動作するサプライチェーン攻撃とは異なり、これらのパッケージにはinstallやpostinstallのフックが含まれていません。
悪意あるコードは、影響を受けるエントリポイントが読み込まれた時点で実行される可能性があります。server-hemera-mongoの場合は、アプリケーションの起動時にインジェクションが作動します。そのため、npmのインストールスクリプトを無効化しても、この脅威は防げません。
ローダーは公開Ethereum RPCエンドポイントに問い合わせ、失敗した場合はBlockscoutにフォールバックして、ウォレット0x1eef0849eda15d87f64e51c73c8442cf3c8bcef3が送信したトランザクションを取得します。
宛先アドレスの先頭4バイトをプライマリIPv4アドレス、続く4バイトをセカンダリアドレスとして解釈します。Ethereumが提供するのはサーバーへのポインタであり、実行可能なペイロード自体をホストしているわけではありません。
マルウェアはTCPポート443上のプレーンHTTPで/0x/clsと/0x/lsを要求します。取得したJavaScriptをXORデコードした後、/0x/clsのステージはアプリケーション内でevalにより実行されるほか、切り離されたnode -iプロセスでも実行されます。
ProtectDevices
一方、/0x/lsのステージは、パイプ経由の標準入力でコードを受け取る切り離された子プロセスでのみ実行されます。
このデッドドロップ方式により、攻撃者は侵害済みパッケージを更新しなくても、新たなトランザクションを公開するだけで感染システムの接続先を切り替えられます。
通知されたサーバーを1台ブロックしても、その後に用意される代替インフラの発見は防げません。
PolinRiderマルウェアによる攻撃
影響を受けた6つのリリースは、ローダーをeval(atob(...))の中に隠しています。残る6つは、文字の並べ替えによって埋め込みコードを復元し、JavaScriptのFunctionコンストラクタを間接的に呼び出します。
後者の亜種は、Base64やevalといった目立つシグネチャを避けながら、同じウォレット、取得パス、XORキーを維持しています。
| パッケージ | 影響を受けるバージョン |
|---|---|
@adminide-stack/client-redux |
0.0.16-18 |
@adminide-stack/health-api-server |
0.0.18-alpha.465 |
@adminide-stack/user-activity-browser |
1.1.3-alpha.114 |
@adminide-stack/utils |
0.0.16-129, 0.0.16-130 |
server-hemera-mongo |
0.0.15, 0.0.16 |
cdeops |
13.5.31 |
@adminide-stack/forms-core |
5.1.9-alpha.3 |
@adminide-stack/yantra-help-browser |
12.0.194 |
@cdmbase/wiki-browser |
12.0.18-alpha.53 |
@pubngo-stack/help-browser |
12.0.23-alpha.3 |
どのエントリポイントが使われるかが重要です。cdeopsの場合、CommonJSのクライアントパスはインジェクションされたclient.jsに到達しますが、ES Moduleのインポートは別のclient.mjsにマッピングされます。
被害の有無を評価する際は、依存関係に含まれているだけで侵害の証拠とみなすのではなく、実際にどのファイルが実行されたかを確認する必要があります。
Sonatype Research Labsの報告によると、侵害されたGitHubリポジトリで見つかったPolinRiderのローダーと、同一のEthereumウォレットおよび一致するステージパスが確認されています。
Greenflaggedは11月3日、ウォレットのトランザクションから95.135.181.151をデコードしました。このアドレスは、GitGuardianがすでにフォールバック用インフラとして特定していたものです。
こうした重複はPolinRiderとの関連を裏付けるものですが、GhostActionと運用者が共通していることまでは立証していません。
Greenflaggedはその後、Nodeのリモートアクセス型トロイの木馬(RAT)をインストールし、npmのlib/cli.jsやデスクトップアプリケーションの起動ファイルを通じて永続化を図るステージを取得しました。
分析では、VS Code、Cursor、Discord、GitHub Desktopなどが標的として特定されています。このため、実行後は依存関係を削除するだけでは不十分です。
各チームは、該当する12のリリースについて、直接の依存関係と推移的依存関係、ロックファイル、ミラー、キャッシュ、ビルド記録を調査する必要があります。
影響を受けるエントリポイントを、プロセスのテレメトリや外向きの通信と突き合わせてください。特に、切り離されたNodeプロセスや、ポート443での想定外のHTTP通信に注意が必要です。
インジェクションされたコードが実行された場合は、ホストを隔離して証拠を保全し、永続化の手口を調査したうえで、アクセス可能だった認証情報をすべてローテーションしてください。npmからパッケージを削除しても、すでに成立したホストの侵害は元に戻りません。
MTTRを21分短縮し、サイバー脅威を被害発生前に阻止。ANYRUNのサンドボックスをSOCに統合。
AuditSecurity
翻訳元: https://gbhackers.com/polinrider-malware-attack/