Parameter AIのセキュリティー研究者が、通常のChatGPTの会話共有リンクを、閲覧者の非公開アカウントデータにアクセスする経路に変え得るとする脆弱性を公開した。研究者によると、OpenAIは10月26日に問題を修正し、この報告を同社の最も高い深刻度であるP1に分類したという。

報告された攻撃は、本来は別々の複数のウェブ機能を組み合わせたものだった。ChatGPTのHTML Previewは、信頼できないコードを隔離されたフレーム内で実行する。一方、対話型グラフはMathLiveライブラリーをChatGPTのメインページに読み込んでいた。Parameter AIは、MathLiveのメッセージリスナーが、フレーム間で送られる一部のメッセージのオリジンを十分に検証していないことを発見した。この不備により、隔離されたプレビューから、信頼されたページに描画される内容に影響を及ぼすことができた。

研究者は、攻撃者が選んだHTMLを含む、サンドボックス化されていない`srcdoc`フレームをMathLiveに作成させることができたと説明した。ChatGPTのコンテンツセキュリティーポリシーは、通常のインラインスクリプトを引き続き遮断していた。しかし、研究チームは、そのポリシーですでに許可されているYouTubeのエンドポイントを経由する別の経路を見つけた。研究者の説明によれば、この一連の手法によって、最終的にはプレビューサイトの制限された実行主体としてではなく、`chatgpt.com`のオリジンでJavaScriptを実行できるようになった。

この違いが決定的だった。ChatGPT自身のオリジンで動作するコードは、リンクを開いた利用者として、認証済みのアプリケーションインターフェースを呼び出すことができた。Parameter AIによると、試験では被害者役のアカウントの会話一覧を列挙し、攻撃者とは一度も共有されていない非公開の会話から内容を取得したうえで、外部サーバーに情報を送信したという。

最終的な攻撃の配信方法では、グラフと悪意あるプレビュー用の内容の両方を含む、公開された`/share/`の会話を利用した。研究者によると、最も安定して動作した方式では、閲覧者が共有会話を開き、ChatGPTの通常のPreviewボタンを押す必要があった。アプリケーションのインストール、プロジェクトへの参加、コードの貼り付け、ブラウザーの開発者ツールの使用はいずれも必要なかった。

今回の公開は、ブラウザーの隔離機能が、最も明らかに信頼できない要素を囲むサンドボックスだけでなく、構成要素間のやり取り全体に依存していることを改めて示している。プレビューが親フレームを直接調べられないままでも、別の機能が設置した、受け入れ条件の緩いメッセージリスナーには到達できる場合がある。同様に、信頼された外部スクリプトの配信元が、別の用途に転用できる動作を提供していると、コンテンツセキュリティーポリシーの効力が弱まる可能性がある。

Parameter AIの報告は、管理された条件下での研究を説明したものであり、実際の環境で悪用された証拠を示すものではない。脆弱性が修正された現在、この技術的な説明は開発者向けの事例研究として最も役立つ。メッセージのオリジンと送信元ウィンドウを検証すること、信頼できないHTMLの挿入を避けること、動的に作成されるフレームをサンドボックス化すること、そしてサイトのセキュリティーポリシーが許可するすべてのスクリプト配信元を見直すことが教訓となる。