大規模NPMサプライチェーン攻撃:TanStack、Mistral AIを含む170パッケージが標的に
2026年5月12日、SafeDepチームはnpmおよびPyPIエコシステムを標的としたサプライチェーン攻撃を公開しました。TanStackやMistral AIなど170以上のパッケージが悪意あるコードに改ざんされました。攻撃者はビルドスクリプトを改変し、ダウンローダーを仕込み、Sessionプロトコルを使用して認証情報を流出させました。さらに、IDEやAIエージェントを汚染する自己複製機構も含まれており、被害者のリポジトリに悪意ある設定ファイルを自動コミットすることで持続的な感染サイクルを形成します。
記事インテリジェンス
要点
- TanStackやMistral AIなど170以上のパッケージが侵害され、package.jsonの改変と悪意あるスクリプトの追加が行われました。
- 悪意あるペイロードはAES暗号化とBunランタイムを使用し、AWS、HashiCorp Vault、GitHubトークンなどを狙うモジュール式の認証情報窃取フレームワークを備えています。
- SessionプロトコルとOxenネットワークを介したデータ流出は動的なルーティングを可能にし、固定ドメインによるブロックが困難です。
- 攻撃者はIDE設定とGitHub GraphQL APIを利用して悪意あるファイルをブランチに自動コミットし、コードをプルした開発者に感染を広げます。
重要な理由
このニュースが重要なのは、TanStackやMistral AIなど170以上のパッケージが侵害され、package.jsonの改変と悪意あるスクリプトの追加が行われましたためです。
技術的影響
モデル選定、推論コスト、プロダクト能力、評価基準に影響する可能性があります。
2026年5月12日、セキュリティ研究チームSafeDepは、npmおよびPyPIのパッケージエコシステムを標的とした大規模なサプライチェーン攻撃を報告しました。この攻撃はTanStackやMistral AIの公式パッケージを含む170以上のパッケージに影響を与えました。攻撃者は複数の手法で悪意あるコードを注入し、認証情報を盗むだけでなく、開発者環境のIDEやAIエージェント設定を汚染することで攻撃範囲を拡大しようとしました。
攻撃者はパッケージのビルドスクリプトを改ざんしました。例えば、Mistral AIのパッケージでは、既存のビルドコマンドをpreinstallフックに置き換え、setup.mjsとrouter_init.jsの2つのファイルを追加しました。setup.mjsは特定のプラットフォーム用のBunランタイムをダウンロードし、高度に難読化されたrouter_init.jsペイロードを実行します。このペイロードはAES暗号化と文字列難読化技術を使用しており、静的解析を困難にしています。注目すべき点として、攻撃者がTanStackパッケージ用のテンプレートを流用したため、Mistralパッケージ内のファイル名に不一致が生じ(実際のファイルはrouter_init.jsだが、setup.mjsではtanstack_runner.jsを参照)、実行エラーが発生しました。
一方、TanStackパッケージでは、より巧妙な方法が取られました。攻撃者はnpmのoptionalDependenciesフィールドを利用し、GitHubリポジトリ内の悪意あるコミットを指す依存関係を導入しました。この依存関係はインストール時にprepareスクリプトをトリガーし、直接悪意あるペイロードを実行します。さらに、exit 1によってスクリプトが失敗した後の出力を抑制します。また、攻撃者はTanStackのGitHubリポジトリへの書き込み権限を取得しており、GitHubの認証情報とnpmの公開トークンの両方が侵害されたことを示しています。
router_init.jsペイロードは2.2MBの単一行JavaScriptファイルであり、内部にモジュール式の認証情報窃取フレームワークを実装しています。このフレームワークには、AWS認証情報(IMDSエンドポイント経由)、HashiCorp Vaultトークン、GitHub Actionsトークン、npmトークンなど、さまざまなターゲットに特化したサービス用クラスが含まれています。ペイロードは正規表現を使用して各種トークンをマッチング・収集し、埋め込まれたSessionクライアントを介してデータを外部に送信します。SessionはOxenネットワークに基づくオープンソースの暗号化通信プロトコルで、オニオンルーティングとエンドツーエンド暗号化をサポートしています。ペイロードはSessionのシードノードに接続してサービスノードのリストを取得し、動的に解決されたノードを介して攻撃者のSession IDに暗号化メッセージをルーティングします。このルーティングは動的に行われるため、固定ドメインやIPに基づく従来のブロック戦略は効果が薄いです。
認証情報窃取に加えて、このペイロードは自己複製および拡散能力も持ち合わせています。VS CodeやClaude Codeの設定ファイル、および自身のコピーを含むファイルマッピングを定義しています。ペイロードが被害者のCI/CD環境(GitHub Actionsなど)で実行されると、環境変数GITHUB_REPOSITORYを読み取り、GitHubのGraphQL APIを使用して現在のリポジトリのブランチを照会します。次に、メインブランチ(main、masterなど)を除外し、機能ブランチを選択して、GitHubのcreateCommitOnBranchミューテーションを介して悪意ある設定ファイルをそれらのブランチにコミットします。これらの設定ファイルは、IDEやAIエージェントがプロジェクトを読み込む際にsetup.mjsを実行するように構成されており、完全な感染サイクルを形成します。つまり、汚染されたブランチをクローンまたはプルした開発者は、プロジェクトを開いた瞬間にペイロードがトリガーされ、認証情報が盗まれ、さらに拡散が続くことになります。
SafeDepチームは報告後、npmおよびGitHubのセキュリティチームに連絡し、現在悪意あるバージョンは削除されています。しかし、攻撃者がSessionプロトコルとGitHubの組み込み機能を利用したため、追跡と除去は困難です。開発者は直ちに、@tanstack/routerのバージョン1.169.5および@mistralai/mistralのバージョン0.0.297が依存関係に含まれていないか確認し、暴露された可能性のあるすべてのトークンをローテーションすることを推奨します。また、GitHubアカウントに多要素認証を有効にし、リポジトリのコミット履歴を定期的に監査することも重要です。