Popular npm Package With 150K+ Weekly Downloads Hit by Credential-Stealing Supply-Chain Worm
2026/08/31 CyberSecurityNews — 広く利用されている npm パッケージ OpenAPI React Query Codegen に、自己拡散型の Shai-Hulud ペイロードが仕込まれたことで、認証情報を窃取するマルウェアの配布経路となっている。影響を受ける @7nohe/openapi-react-query-codegen パッケージは TanStack Query コードを生成するものであり、週間ダウンロード数は 15 万回を超える。開発者が依存関係をインストールした際、または npm が特殊に細工されたビルド設定ファイルを処理した際に、この悪意のあるリリースが実行される可能性がある。それにより展開されるマルウェアは、公開用認証情報/クラウド認証情報/ソースコード関連の認証情報などが保存されていることの多い、ワークステーションおよび自動ビルドランナー上で実行される可能性がある。

8月28日に出現したこの活動を特定した JFrog の研究者により、この新たな Mini Shai-Hulud の波に Trinitite という名が付けられた。約 20 分間に 10 件のリリースが公開されており、信頼された 1 つのパッケージが侵害されるだけで下流プロジェクトへ急速に影響が及ぶ可能性がある。JFrog が提供するレポートでは、このインシデントが重要な理由として、ワームによるトークンの窃取/被害者が公開権限を持つ場所への改変済みパッケージの公開が挙げられている。
このフィードバック・ループにより、1 つの汚染された依存関係がより広範なサプライチェーンの問題へと発展する可能性がある。以前の Shai-Hulud サプライチェーン攻撃や、個人/企業の環境で最近も続いている npm の感染拡大と、今回の状況は類似している。
広く利用されている npm パッケージ
攻撃者が悪用したとみられるのは npm 自体ではなく、プロジェクトのリリース・ワークフローである。分析によると、特定のリリース・トリガーを含む任意のプルリクエスト・コメントによって公開ジョブが開始され、プルリクエストのチェックアウトと GitHub Actions OpenID Connect (OIDC) を悪用して信頼済みの公開トークンを取得する処理が行われていた。
メンテナによるチェックが欠けていたことで、GitHub ユーザーには、プルリクエストの作成/リリース・プロセスの起動/有効な履歴を持つパッケージの公開が可能になる。ただし、この履歴から確認できるのはリポジトリ内でリリース・ジョブが実行されたことだけであり、リリースされたコードの安全性が保証されるわけではないため、依存関係のアラートを確認する際には、この点が重要な違いとなる。
最初の 2 件のプレリリースには、細工されたインストール・コンポーネントが含まれていたが、完全なワームにはなっていなかった。しかし、その後の 8 件の安定版には、ワーム・ペイロードが含まれていた。そのうちの 4 件では、細工された “binding.gyp” ファイルが悪用され、その他の 4 件では preinstall フックも追加された。この手法は、”binding.gyp” を利用したサプライチェーン攻撃でも取り上げられている。
ローダーは高度に難読化されており、Bun ランタイムが存在しない場合のダウンロード/マルウェアの復号/一時ディレクトリからの実行/実行後のファイル削除などが行われる可能性がある。npm のライフサイクル・スクリプトを無効化するだけでは、このケースを阻止できない可能性があるのは、インストール時に node-gyp が “binding.gyp” を処理する可能性があるためだ。したがって、該当する悪意のパッケージ・バージョンをインストールした場合には、ホストは侵害されたと捉える必要がある。
レポートでは、この活動の実行主体を断定していないが、TeamPCP のメンバーとみられる人物がオーストラリアで逮捕された翌日に、このパッケージの悪意のあるリリースが公開されたことを指摘している。
認証情報の窃取とインシデント対応
Trinitite が起動すると、GitHub/npm/PyPI/RubyGems/クラウドサービス/HashiCorp Vault/Kubernetes の認証情報が探索され、CI シークレット/AI 開発ツールの保存場所にあるデータも標的とされる。窃取されたデータは暗号化され、被害者の GitHub トークンを介して公開リポジトリにコミットされるほか、取得したパッケージの公開権限を悪用してパッケージの改変/再公開に至る可能性がある。
さらに、リポジトリのシークレットを収集するよう設計された、ワークフローも追加される。この組み合わせは、ソフトウェアを公開できるビルド・システムやデプロイ用認証情報を保持するシステムなどを利用する、開発者および組織に影響を及ぼし、侵害されたワークフローから認証情報が窃取されるリスクが高まる。
研究者は、Linux/macOS 向けの永続化コンポーネントに加えて、GitHub を監視するトークン・モニターも発見している。それらにより、トークンの失効を検知した場合に、破壊的なクリーンアップ・ルーチンが起動される可能性がある。そのため、インシデント対応では、認証情報を失効させる前に、影響を受けるマシンまたはランナーを隔離するなどの、対応の順序が重要になる。
影響を受けるリリースをインストールしたチームには、デバイスまたは CI ランナーの隔離/特定されたユーザーおよびサービスの停止と無効化/記載された一時ファイルおよび永続化ファイルの削除が求められる。さらに、依存関係の削除/既知の安全なバージョンへの固定/ロックファイルの再構築/リポジトリおよびリリース履歴における未認可の変更の調査を行うべきだ。それに加えて、モニターを削除した後に、クリーンな環境で GitHub/npm/PyPI/RubyGems/クラウド/SSH/CI の認証情報をローテーションする必要がある。
セキュリティ・チームに求められるのは、信頼できないプルリクエスト・コメントによる公開処理を防止し、信頼済み履歴を安全性の証明ではなく侵害のシグナルとして扱うことである。
侵害指標 (IoC)
| TypeIndicatorDescription | ||
|---|---|---|
| Compromised package | @7nohe/openapi-react-query-codegen | Package identified as carrying the Trinitite Mini Shai-Hulud payload. |
| Malicious versions | 0.5.4, 0.5.5, 1.6.3, 1.6.4, 2.2.1, 2.2.2, 3.0.3, 3.0.4 | Stable releases containing the worm payload |
| Suspicious prereleases | 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be, 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab | Initial malicious prerelease versions |
| Known safe versions | 0.5.3, 1.6.2, 2.2.0, 3.0.2 | Last safe versions listed by researchers |
| Files | 3FWCvzduYZg.js, is_it_this_simple.js, binding.gyp, package.json, dog.c | Malicious or modified package files |
| Temporary paths | /tmp/trinnyyyy-*/bun, /var/tmp/.shit, ~/.bun/bin/bun | Runtime download and temporary payload locations |
| Persistence files | ~/.local/share/diaper/poopy.py, ~/.config/systemd/user/systemd-detect-fash.service, ~/.config/systemd/user/sysvinit-detect-fash.service, ~/.config/sysvinit-detect-fash/ | Linux persistence-related artifacts |
| macOS persistence | ~/Library/LaunchAgents/com.user.systemd-detect-fash.plist, ~/Library/LaunchAgents/com.user.sysvinit-detect-fash.plist | macOS LaunchAgent persistence artifacts |
| Campaign strings | Trinitite: Sponsored by Preview 2 Effects, doubletrinnys-, meow meow meow, IfYouRevokeThisTokenYourABadUser, Visit69WykenAveForFreeiPod, n1ggatr1n, StopRapingMyBotnetPlz, ClaudeCode Review | Strings associated with the malware campaign |
| Decoy network indicator | poopy.com, /v1/idk | Unused decoy host and path referenced by the malware |
| Download URL | hxxps[:]//raw[.]githubusercontent[.]com/oven-sh/bun/refs/heads/main/src/ru | Bun-related download reference |
| Download URL | hxxps[:]//github[.]com/oven-sh/bun/releases/download/bun-v1.4.0/ | Bun v1.4.0 release download location |
| GitHub API URL | hxxps[:]//api[.]github[.]com/user/repos | GitHub repository API endpoint |
| GitHub API URL | hxxps[:]//api[.]github[.]com/search/commits | GitHub commit-search API endpoint |
| PyPI URL | hxxps[:]//upload[.]pypi[.]org/legacy/ | PyPI upload endpoint |
| npm URL | hxxps[:]//registry[.]npmjs[.]org/-/npm/v1/oidc/token/exchange/package/ | npm OIDC token-exchange endpoint |
| Sigstore URLs | hxxps[:]//fulcio[.]sigstore[.]dev/api/v2/signingCert, hxxps[:]//rekor[.]sigstore[.]dev/api/v1/log/entries | Sigstore certificate and transparency-log endpoints |
注: IP アドレス/ドメインは、意図しない名前解決/ハイパーリンク化を防ぐため、意図的に無害化されている (例: [.])。再有効化する場合は、MISP/VirusTotal/SIEM など、管理された脅威インテリジェンス・プラットフォーム内だけで行う必要がある。
開発現場や自動構築処理で信頼されたライブラリを介した秘密情報の不審な取得と悪影響の拡大が問題となっています。今回は npm パッケージである OpenAPI React Query Codegen を対象とした感染の手法と開発環境への影響を扱っています。設定ファイルや処理手順の検証不足により、第三者による悪意ある処理の実行/認証情報やアクセス許可の外部送信/公開権限の不正利用に伴う他プロジェクトへの二次感染といった被害が生じます。保護対策として、影響を受けた実行基盤や端末の速やかな隔離/不審なファイルの削除/依存関係の正常な固定化/認証情報の安全な再発行と切り替えを順に実施することが求められます。

You must be logged in to post a comment.