TanStackのnpmパッケージ42件にサイバー攻撃でマルウェアが混入、GitHub Actions 経由で認証情報窃取の恐れ(CVE-2026-45321)

セキュリティニュース

投稿日時: 更新日時:

TanStackのnpmパッケージ42件にサイバー攻撃でマルウェアが混入、GitHub Actions 経由で認証情報窃取の恐れ(CVE-2026-45321)

Socket の調査によるとTanStackのnpmパッケージ42件、84バージョンに認証情報を窃取するマルウェアが混入していた事が分かりました。GitHub ActionsのOIDC trusted publisher、pull_request_target、キャッシュ汚染が組み合わされたサプライチェーン攻撃について、影響範囲、原因、確認方法、情報システム部門が取るべき対応を解説します。

【サマリー】

  • 2026年5月11日19時20分から19時26分 UTC の間に、42件の@tanstack/* npmパッケージで、合計84件の悪意あるバージョンが公開されました。
  • GitHub Security Advisoryでは、本件にCVE-2026-45321が割り当てられ、Critical、CVSS 9.6と評価されています。
  • 攻撃者はnpmトークンを盗んで公開したのではなく、TanStackの正規GitHub Actions OIDC trusted publisher連携を悪用して、正規の公開経路から悪意あるパッケージを公開しました。
  • 悪意あるパッケージには、約2.3MBの難読化されたrouter_init.jsが含まれ、インストール時に実行される仕組みでした。
  • マルウェアはAWS、GCP、Kubernetes、HashiCorp Vault、npm、GitHub、SSH秘密鍵などの認証情報を窃取する可能性があります。

TanStackのnpmパッケージにマルウェアが混入

TanStackは2026年5月11日、同社のnpmサプライチェーン侵害に関するポストモーテムを公開しました。

同社によると、2026年5月11日19時20分から19時26分 UTC の間に、42件の@tanstack/* npmパッケージで、合計84件の悪意あるバージョンがnpmレジストリに公開されました。GitHub Security Advisoryでも、同事案はCritical、CVSS 9.6として公開されており、CVE-2026-45321が割り当てられています。

対象には@tanstack/react-router、@tanstack/vue-router、@tanstack/solid-router、@tanstack/historyなど、TanStackのRouter関連パッケージ群が含まれています。

一方で、TanStackは

@tanstack/query、@tanstack/table、@tanstack/form、@tanstack/virtual、@tanstack/store、@tanstack/startメタパッケージについては、

影響を受けていないとして説明しています。

影響を受ける可能性がある利用者

影響を受ける可能性があるのは、2026年5月11日に、影響対象の@tanstack/*パッケージの悪意あるバージョンに対してnpm install、pnpm install、yarn installを実行した開発者またはCI環境です

TanStackおよびGitHub Security Advisoryは、該当する環境を侵害されたものとして扱い、インストールプロセスからアクセス可能だったすべての認証情報をローテーションするよう案内しています。

確認時には、package-lock.json、pnpm-lock.yaml、yarn.lock、CIの実行ログ、npmキャッシュ、node_modules、ビルド成果物を確認する必要があります。単にpackage.jsonに明示的に書かれているかだけでは不十分です。推移的依存関係として取り込まれた可能性や、CI上で一時的に解決された可能性もあります。

確認すべき痕跡

GitHub Security Advisoryは、悪意あるパッケージの確認方法として、公開済みマニフェスト内に次のoptionalDependenciesが含まれているかを確認するよう案内しています。

"optionalDependencies": {
  "@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c"
}

また、router_init.jsという約2.3MBの難読化JavaScriptファイルがパッケージのルートに存在することも痕跡として示されています。

@tanstack/setupはnpmレジストリ上の正規パッケージではなく、GitHubのforkネットワーク上にある孤立コミットを参照する仕組みでした。npmがoptional dependencyを処理する際に、GitHub上のコミットを取得し、prepare lifecycle scriptを実行することで、ペイロードが起動する構成です。

TanStackは、影響を受けたパッケージを確認する際、インストールスクリプトを実行しないnpm packによる確認方法も案内しており、調査時に不用意にnpm installを実行すると、再度ペイロードを実行してしまう恐れがあるため、確認作業は隔離された環境で行う必要があります。

何が起きたか

今回の攻撃では、攻撃者がTanStackのnpm公開トークンを盗んだわけではありません。

TanStackは、npmトークンは盗まれておらず、npm publishワークフロー自体も改ざんされていないと説明しています。

攻撃者は、pull_request_targetの危険な使い方、GitHub Actionsキャッシュ汚染、GitHub ActionsランナーのメモリからOIDCトークンを抽出する手法を組み合わせ、正規のOIDC trusted publisher経路を使って悪意あるバージョンを公開しました。

攻撃者はまず、TanStack/routerのフォークを作成し、無害に見えるプルリクエストを通じてpull_request_targetで動作するワークフローを起動させました。このワークフローは、フォーク側のコードをチェックアウトしてビルドを実行し、結果としてGitHub Actionsのキャッシュに攻撃者のコードが混入しました。その後、別の正当なPRがmainにマージされ、リリースワークフローが起動した際に、汚染されたキャッシュが復元され、攻撃者のコードが実行されました。

正規のCI/CDパイプラインが悪用された点が深刻

TanStackの説明で重要なのは、攻撃者が外部からnpmへ直接不正ログインしたのではなく、正規のCI/CDパイプラインの中で短命の公開用認証情報を取得し、正規の公開経路を使った点です。

TanStackの通常のリリースでは、npm publishは開発者の端末から実行されるのではなく、GitHub Actions上のCIワークフローから実行されます。

npmへの認証にはGitHubのOIDC trusted publisher連携が使われており、長期有効なnpm公開トークンを保管しない設計でした。この設計自体は、開発者端末からnpmトークンが盗まれるリスクを下げるものです。

しかし今回は、ランナー上で攻撃者のコードが実行されたことで、ワークフローが正当に取得した短命のOIDCトークンがメモリから抽出され、registry.npmjs.orgへのPOSTリクエストに使われました。つまり、長期トークンを置かない設計でも、リリースワークフローの実行環境そのものが侵害されると、正規の信頼経路が攻撃者の配布経路になります。

マルウェアはインストール時に認証情報を窃取

GitHub Security Advisoryによると、影響を受けるバージョンをインストールすると、約2.3MBの難読化されたrouter_init.jsが実行されます。このペイロードは、AWS IMDSやSecrets Manager、GCPメタデータサービス、Kubernetesサービスアカウントトークン、HashiCorp Vaultトークン、~/.npmrc内のnpmトークン、GitHubトークン、SSH秘密鍵などを探索します。

窃取された情報は、Session/Oxen messengerのファイルアップロードネットワークを通じて外部送信されると説明されています。加えて、被害環境のnpmメンテナー情報を列挙し、同じ注入を使って別パッケージへ拡散する自己増殖の挙動も示されています。

このため、影響は単にTanStackパッケージを使っているアプリケーションだけにとどまりません。CI環境や開発端末にクラウド認証情報、GitHub PAT、npmトークン、SSH鍵、Kubernetesトークン、Vaultトークンが存在していた場合、そこからクラウド環境、ソースコード管理、内部システムへ被害が広がる恐れがあります。

TanStackが実施した対応

TanStackは、外部研究者からの報告を受けてインシデント対応を開始し、影響範囲を42パッケージ、84バージョンと特定しました。影響を受けたバージョンはnpm上でSECURITY notice付きで非推奨化され、npmのポリシー上可能なものはunpublishされました。unpublishできないものについては、npm securityチームと連携し、サーバー側でのtarball削除を依頼しています。

また、TanStackはすべてのTanStack/* GitHubリポジトリのキャッシュをAPI経由で削除し、bundle-size.ymlの構成変更、repository_owner guardの追加、サードパーティAction参照のSHA固定などのハードニングを実施しています。さらに、後続の記事では、長期npm公開トークンを持たないOIDC方式自体は有効だった一方で、信頼されたCIランナー上で攻撃者コードが実行されたことが問題だったとしています。

認証情報のローテーションが最優先

今回のマルウェアは、開発端末やCI環境から認証情報を窃取することを目的としていました。そのため、該当する環境でインストールが行われた場合、パッケージを更新するだけでは不十分です。

優先してローテーションすべきものは、GitHub PAT、GitHub Actions Secrets、npmトークン、クラウドアクセスキー、AWS IAMロールに関連する認証情報、GCPサービスアカウント、Kubernetesサービスアカウントトークン、Vaultトークン、SSH秘密鍵です。あわせて、クラウド監査ログ、GitHub監査ログ、npm publish履歴、CI実行履歴、Vault監査ログを確認し、該当時間帯以降に不審な操作がないかを確認する必要があります。

特にCI環境では、ビルドジョブに過剰な権限が付与されていることがあります。読み取りだけでよいジョブにデプロイ権限が渡っていないか、PR検証ジョブに本番用シークレットが渡っていないか、OIDCでクラウドロールを引き受けられる条件が緩すぎないかを確認すべきです。

出典

TanStack Blog Postmortem: TanStack npm supply-chain compromise

GitHub Security Advisory GHSA-g7cv-rxg3-hmpx Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys

TanStack Blog Hardening TanStack After the npm Compromise

SecurityOnline Supply Chain Siege: 84 TanStack Packages Compromised to Steal GitHub Secrets

Socket TanStack npm Packages Compromised in Ongoing Mini Shai-Hulud Supply-Chain Attack