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.4、0.5.5、1.6.3、1.6.4、2.2.1、2.2.2、3.0.3、3.0.4です。安全なバージョンは0.5.3、1.6.2、2.2.0、3.0.2となります。
組織は、影響を受けるバージョンをインストールしたエンドポイントやCIランナーを隔離する必要があります。セキュリティチームは、3FWCvzduYZg.js、binding.gyp、trinnyyyy-*ディレクトリ、/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/