Parameter Labsは最近、ChatGPTのHTMLプレビュー機能(OpenAIは以前「Canvas」と呼んでいたが、最新版ではHTMLプレビューと呼ばれる)に対する複雑な攻撃チェーンを明らかにした。この機能はインタラクティブなカスタムHTMLアプリをサンドボックス化されたiframe内で表示するため、信頼できないコードがOpenAIのAPIに触れたり、個人データにアクセスしたりしないよう、厳格な隔離が不可欠である。
攻撃の起点は、OpenAIがグラフ機能のために導入したMathLive JavaScriptライブラリだ。このライブラリには独自の仮想キーボードが含まれており、サンドボックス化されたiframeからpostMessage()を介して親ページのキーボードロジックを起動できる。問題は、メッセージ受信コードがinnerHTMLを使用していた点にある。これにより、メッセージを送信できるあらゆるフレーム(他のサンドボックスiframeやHTMLプレビューiframeを含む)が親ページにカスタムHTMLを挿入でき、それを防ぐ仕組みが存在しなかった。
innerHTMLはscript要素を直接実行しないものの、攻撃者はこれを利用してサンドボックス制限のない新しいiframeを注入できる。さらに、OpenAIのCSPはインラインスクリプトを完全にブロックし、スクリプトの読み込みを少数のドメインに限定していたが、その中にYouTubeが含まれていた。攻撃者はYouTube oEmbedエンドポイントを悪用してJavaScriptを反射させ、コード実行に成功した。
ひとたびChatGPTページ上でJavaScriptを実行できれば、APIからユーザーの個人データを取得し、画像参照を通じて外部に送信することは容易だった。最終的に、攻撃者はChatGPTの共有URLを作成でき、サインイン済みのユーザーがそのリンクを訪問すると、個人データが窃取されたり、本人に代わって操作が実行されたりする可能性があった。
OpenAIはこの脆弱性を修正し、5,000ドルの報奨金を支払った。Simon Willisonは、これほど深刻な脆弱性に対して報奨金が低すぎるとコメントしている。この事件は、AIアプリケーションのセキュリティにおいて、サンドボックス隔離、CSP設定、サードパーティライブラリのメッセージ処理が極めて重要であることを改めて示している。