サプライチェーン型ワーム「Shai-Hulud Trinitite」、週間15万件超のダウンロード数を持つnpmパッケージに感染

Trinititeと名付けられた新たなShai-Hulud系サプライチェーン攻撃キャンペーンが、週間ダウンロード数15万件以上を誇るnpmパッケージ@7nohe/openapi-react-query-codegenを侵害しました。

悪意のあるバージョンは、隠蔽されたbinding.gyp実行パスと、大規模に難読化されたJavaScriptローダーを使用し、開発者のマシンやCI環境への感染を狙います。

今回のキャンペーンは、以前に報告されたShai-Hulud「Mini」ワームファミリー、具体的にはHere We Go Again、May 19、Miasmaといった一連の波と関連があるとみられています。

研究者らによると、今回の攻撃は基本的なマルウェア機能は同じものの、公開方法やキャンペーン文字列、暗号鍵、インストール時の実行手法が変更されているとのことです。

侵害されたパッケージのリリースワークフローは、プルリクエストのコメントに含まれるnpm publishという文字列を公開のトリガーとして受け付けていたと報告されています。そのワークフローはプルリクエストをチェックアウトし、コメント投稿者がメンテナーであるかを確認しないまま、GitHub Actions OpenID Connect(OIDC)経由でパッケージを公開してしまいました。

これにより、攻撃者が制御するコードが正当な信頼済み公開用トークンを取得できる状態になっていました。

その結果、悪意のあるバージョンは正規のnpmプロベナンス(来歴証明)を示していますが、このプロベナンスが証明するのはリポジトリの自動公開ワークフローが実行されたという事実だけであり、公開されたコードの安全性を保証するものではありません。

攻撃者はまず2つのプレリリースバージョンを公開しました。そのうちの1つにはpreinstallコマンドが含まれており、Bunをインストールした上で、存在しないファイルis_it_this_simple.jsを実行しようとしていました。

このバージョンにはワーム本体こそ含まれていませんでしたが、その環境変数はすでに後の感染ワークフローを参照するものになっていました。

その後公開された8つの安定版パッケージで、主要なペイロードが導入されました。最初の波ではbinding.gypが使われ、2番目の波ではnode 3FWCvzduYZg.jsを実行する、目に見える形のpreinstallフックが追加されました。

3FWCvzduYZg.jsファイルは、XORで難読化された4~6MBのローダーです。これがBunを通じて、より大規模なShai-Huludワームを復号・実行した後、一時的なJavaScriptペイロードを削除します。

Bunが利用できない場合、ローダーはGitHubから正規のBunバイナリをダウンロードして保存し、一時ディレクトリに格納します。

注目すべき手法は、悪意のあるbinding.gypファイルです。そのUnicodeエスケープされたPython条件式は、最終的に以下を実行します。

node-gypはインストール中にbinding.gypの条件式を評価できるため、単に--ignore-scriptsを使用するだけでは実行を防げない場合があります。これにより、package.jsonのライフサイクルスクリプトのみを検査するセキュリティ対策を、マルウェアが回避できてしまいます。

活動を開始すると、TrinititeはGitHub、npm、PyPI、RubyGems、クラウド、Kubernetes、Vault、SSH、CIの各種認証情報を窃取する可能性があります。

さらに、GitHubランナーのメモリ内からシークレットを検索したり、悪意のあるGitHub Actionsワークフローを作成したり、窃取したトークンで書き込み権限があるパッケージを再公開したりします。

影響を受けるバージョンは0.5.40.5.51.6.31.6.42.2.12.2.23.0.33.0.4です。安全なバージョンは0.5.31.6.22.2.03.0.2となります。

組織は、影響を受けるバージョンをインストールしたエンドポイントやCIランナーを隔離する必要があります。セキュリティチームは、3FWCvzduYZg.jsbinding.gyptrinnyyyy-*ディレクトリ、/var/tmp/.shit~/.local/share/diaper/poopy.pyを調査すべきだと、jfrogは述べています

注: IPアドレスやドメインは、誤ってアクセスまたはリンクされることを防ぐため、意図的に無害化されています(例: [.])。再度有効な形式に戻す場合は、MISP、VirusTotal、あるいは自社のSIEMなど、管理された脅威インテリジェンス基盤の中でのみ行ってください。

ANY.RUNのブラウザ内データ検査で、検知・調査・対応をより迅速に-> ANY.RUNでSOCを強化

翻訳元: https://cyberpress.org/shai-hulud-worm-hits-npm/

本記事は cyberpress.org の記事を翻訳・要約したものです。