OpenAPI 向けの npm パッケージにマルウェア:15 万回/週を超えるダウンロード数と下流への影響

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 ユーザーには、プルリクエストの作成/リリース・プロセスの起動/有効な履歴を持つパッケージの公開が可能になる。ただし、この履歴から確認できるのはリポジトリ内でリリース・ジョブが実行されたことだけであり、リリースされたコードの安全性が保証されるわけではないため、依存関係のアラートを確認する際には、この点が重要な違いとなる。

XOR でラップされたローダー (出典 – JFrog)

最初の 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-codegenPackage identified as carrying the Trinitite Mini Shai-Hulud payload.
Malicious versions0.5.4, 0.5.5, 1.6.3, 1.6.4, 2.2.1, 2.2.2, 3.0.3, 3.0.4Stable releases containing the worm payload
Suspicious prereleases0.0.0-365d4eb738d3146583431948d3ba6e27a32556be, 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0abInitial malicious prerelease versions
Known safe versions0.5.3, 1.6.2, 2.2.0, 3.0.2Last safe versions listed by researchers
Files3FWCvzduYZg.js, is_it_this_simple.js, binding.gyp, package.json, dog.cMalicious or modified package files
Temporary paths/tmp/trinnyyyy-*/bun, /var/tmp/.shit, ~/.bun/bin/bunRuntime 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.plistmacOS LaunchAgent persistence artifacts
Campaign stringsTrinitite: Sponsored by Preview 2 Effects, doubletrinnys-, meow meow meow, IfYouRevokeThisTokenYourABadUser, Visit69WykenAveForFreeiPod, n1ggatr1n, StopRapingMyBotnetPlz, ClaudeCode ReviewStrings associated with the malware campaign
Decoy network indicatorpoopy.com, /v1/idkUnused decoy host and path referenced by the malware
Download URLhxxps[:]//raw[.]githubusercontent[.]com/oven-sh/bun/refs/heads/main/src/ruBun-related download reference
Download URLhxxps[:]//github[.]com/oven-sh/bun/releases/download/bun-v1.4.0/Bun v1.4.0 release download location
GitHub API URLhxxps[:]//api[.]github[.]com/user/reposGitHub repository API endpoint
GitHub API URLhxxps[:]//api[.]github[.]com/search/commitsGitHub commit-search API endpoint
PyPI URLhxxps[:]//upload[.]pypi[.]org/legacy/PyPI upload endpoint
npm URLhxxps[:]//registry[.]npmjs[.]org/-/npm/v1/oidc/token/exchange/package/npm OIDC token-exchange endpoint
Sigstore URLshxxps[:]//fulcio[.]sigstore[.]dev/api/v2/signingCert, hxxps[:]//rekor[.]sigstore[.]dev/api/v1/log/entriesSigstore certificate and transparency-log endpoints

注: IP アドレス/ドメインは、意図しない名前解決/ハイパーリンク化を防ぐため、意図的に無害化されている (例: [.])。再有効化する場合は、MISP/VirusTotal/SIEM など、管理された脅威インテリジェンス・プラットフォーム内だけで行う必要がある。