ChatGPTアカウントを乗っ取った方法
We Took over ChatGPT Accounts (simonwillison.net)
要約
Parameter Labsは、ChatGPTのHTMLプレビュー機能における深刻な脆弱性を発見しました。この機能はサンドボックス化されたiframeを使用していますが、攻撃者はMathLive JavaScriptライブラリの仮想キーボードを悪用し、`postMessage()`を介して親ページにカスタムHTMLを挿入できることを突き止めました。これにより、iframe内の信頼できないコードが新しいiframeを挿入し、YouTubeのoEmbedエンドポイントを介してJavaScriptを実行することが可能になりました。結果として、攻撃者はChatGPTの共有URLを悪用して、他のサインインユーザーのプライベートデータを抜き取ったり、代わりに操作を行ったりすることができました。OpenAIはこの脆弱性を修正し、5,000ドルのバグバウンティを支払いましたが、著者はその額が少なすぎると考えています。
全文翻訳
2026年10月31日 - Link Blog
ChatGPTアカウントを乗っ取った方法(via) Parameter Labsは、ChatGPTのアーティファクトパターンの実装(OpenAIは以前これを「Canvas」と呼んでいましたが、最新の改訂版はHTMLプレビューと呼ばれているようです)に対するエクスプロイトを説明しています。この機能では、インタラクティブなカスタムHTMLアプリがサンドボックス化されたiframeに表示されます。
これらのHTMLが、信頼できないコードがOpenAI APIとやり取りしたり、プライベートデータにアクセスしたりするのを避けるために、厳密にサンドボックス化されていることが重要です。
Parameterは非常に複雑な攻撃チェーンを発見しました。OpenAIはグラフサポートの一部としてMathLive JavaScriptライブラリを使用しており、そのライブラリには独自の仮想キーボードが含まれています。これは、サンドボックス化されたiframeからpostMessage()を介して親ページでトリガーできます。
そのメッセージ受信コードはinnerHTMLを使用しているため、メッセージを送信するものは何でも親にカスタムHTMLを追加できます。そして、HTMLプレビューフレームを含む他のサンドボックス化されたフレームがそのメソッドを呼び出すのを防ぐメカニズムはありませんでした。
これは、iframe内の信頼できないコードがHTMLを挿入できることを意味し、innerHTMLはスクリプト要素を直接実行しませんが、サンドボックス制限なしで新しいiframeを挿入するために使用される可能性がありました。
OpenAIのCSPルールはインラインスクリプトを完全にブロックし、少数のドメインからのスクリプト読み込みのみを許可していましたが、そのうちの1つがYouTubeでした。そして、YouTubeのoEmbedエンドポイントは、JavaScriptを反射して実行させる方法で使用できました。
ChatGPTでJavaScript実行が可能になると、APIからプライベートユーザーデータを取得し、画像参照を介して流出させることが容易になりました。
最終結果:ChatGPTの共有URLを作成でき、それを別のサインインユーザーが訪問すると、そのユーザーのプライベートデータを抜き取ったり、代わりに操作を行ったりすることができました。
OpenAIはこの穴を塞ぎ、5,000ドルのバグバウンティを支払いましたが、これはこれほど深刻な脆弱性にしては少し安すぎると私は思います。