npmパッケージ42個が乗っ取られ、OpenAI社員のPCに侵入された — TanStack攻撃の全貌と教訓
あなたのプロジェクトに、TanStack Routerは入っているだろうか。TanStack Query(旧React Query)は?
5月11日22時45分(UTC)、これらのパッケージを含むTanStackの42個の@tanstack/*npmパッケージに、悪意あるコードが仕込まれた。84のバージョンが汚染され、インストールした開発者のマシンからクレデンシャル(認証情報)を抜き取る仕組みが動き出した。攻撃の名前は「Mini Shai-Hulud」。SF小説『デューン』に出てくる砂虫にちなんだ名前だ。
そしてこの攻撃で、OpenAIの社員2名のデバイスが被害を受けた。
攻撃はどう行われたか
手口は3段階だった。
まず、攻撃者はTanStackのGitHubリポジトリにプルリクエストを送った。GitHub Actionsのpull_request_targetトリガーを悪用する「Pwn Request」と呼ばれるテクニックだ。このトリガーはフォークからのPRでも本家リポジトリのシークレットにアクセスできてしまう。
次に、GitHub Actionsのキャッシュをフォークと本家の信頼境界をまたいで汚染した。キャッシュに毒を仕込むことで、以降の正規のCI/CDパイプラインが汚染されたコードを使って動くようになる。
最後に、ランナープロセスのメモリからOIDCトークンを抜き取った。このトークンを使って正規の権限でnpmにパッケージを公開し、42パッケージ×2バージョンの計84個の汚染バージョンを一気にリリースした。
発見から除去までは約3時間。npmからは5月12日1時53分(UTC)までに汚染バージョンが削除された。同時にPyPI上のMistral AIのパッケージも同じ攻撃で汚染されており、こちらも約3時間で除去されている。
OpenAIへの影響
OpenAIは5月13日に公式ブログで対応を公表した。
影響を受けたのは社員2名の企業端末だ。マルウェアの公開された挙動と一致する活動——具体的にはクレデンシャルの窃取——が確認され、被害社員がアクセス権を持つ一部の内部ソースコードリポジトリへの不正アクセスがあった。
ただし、OpenAIは以下を強調している。
- ユーザーデータへのアクセスはなかった
- 本番システムや知的財産への侵害はなかった
- ソフトウェアの改ざんはなかった
第三者のデジタルフォレンジック企業を起用して調査を実施したとのことだ。
macOSユーザーが今すぐやること
OpenAIはこの件を受けて、セキュリティ証明書のローテーションを実施した。これに伴い、macOS版のOpenAIアプリを最新版にアップデートする必要がある。
2026年6月12日以降、旧バージョンのmacOSアプリはアップデートを受け取れなくなり、動作しなくなる可能性がある。
ChatGPTデスクトップアプリを使っている人は、今のうちにアップデートしておくべきだ。
AIツールのサプライチェーンリスク
今回の件で浮き彫りになったのは、AIツール企業も普通のソフトウェア企業と同じサプライチェーンリスクを抱えている、という当然の事実だ。
OpenAIもMistralも、自社のアプリケーションにTanStackのようなオープンソースライブラリを使っている。そしてそのライブラリがGitHub Actionsの設定ミスで丸ごと乗っ取られた。AIモデルの安全性をどれだけ議論しても、そのモデルを動かすアプリケーションの足元が崩れれば意味がない。
OpenAIは対応の中で、以下のセキュリティ強化策を発表している。
- CI/CDパイプラインで使用するクレデンシャルの追加保護
- パッケージマネージャの設定に
minimumReleaseAge(最低公開日数)を導入し、公開直後のパッケージを自動では取り込まないようにする - 新規パッケージの出所を検証するセキュリティソフトウェアの追加導入
minimumReleaseAgeの導入は地味だが効果的だ。攻撃者が汚染パッケージを公開しても、一定期間は自動的にインストールされない。その間にコミュニティが異常を発見する猶予が生まれる。今回の攻撃も、発見までに3時間だった。公開から24時間のクーリングオフ期間があれば、被害はゼロに近づいていたかもしれない。
開発者が学ぶべきこと
筆者が今回の件で一番考えさせられたのは、「信頼しているライブラリのCI/CDが乗っ取られたら、ほぼ防ぎようがない」という現実だ。
TanStackは個人の趣味プロジェクトではない。React Queryとして知られる、数百万のプロジェクトで使われている主要ライブラリだ。そのCI/CDが数時間で突破された。
個人開発者やスタートアップができる防御策は限られるが、少なくとも以下は検討に値する。
- ロックファイルを使う —
package-lock.jsonやpnpm-lock.yamlでバージョンを固定し、意図しないアップデートを防ぐ npm auditを定期的に実行する — 既知の脆弱性を持つパッケージを検出する- CI/CDの
pull_request_targetトリガーを見直す — 自分のリポジトリで使っていないか確認する - macOS版のOpenAI/ChatGPTアプリを更新する — 今回の件に直接対応
AIツールの進化速度に目を奪われがちだが、それを支えるソフトウェアサプライチェーンの安全性は、地味だが見逃せない。
関連記事
Claude Codeのソースコードがnpm経由で全部見えた日 — 流出から判明した未公開モデルと隠し機能
2026年3月31日にClaude Codeのソース約51万行がnpm経由で流出。未公開モデルOpus 4.7や隠し機能autoDream・KAIROSの正体、ユーザーがやるべき対応まで整理する。
Anthropic Project Glasswing — 静かに始まったClaudeの「防御担当モデル」と、OpenAI Aardvarkへのカウンター
AnthropicがProject Glasswingというサイバーセキュリティ特化モデルを限定公開。限定公開の理由、OpenAI Aardvarkとの役割の違い、企業セキュリティの現場で起きつつある変化を整理する。
OpenAI・Anthropic・Googleが初めて共闘した週 — 中国AIの「敵対的蒸留」に3社が仕掛ける防衛線
OpenAI・Anthropic・GoogleがFrontier Model Forum経由で脅威情報を共有開始。Anthropicが検出した2.4万不正アカウント・1,600万会話の内訳と、敵対的蒸留という手口の正体を解説する。