Parameter.aiの研究チームは、OpenAIのChatGPTプラットフォームにおいて、公開共有リンクを介してアカウントを完全に乗っ取ることが可能な重大なセキュリティ上の欠陥を特定しました。この脆弱性は、数学関連のインタラクティブなグラフ、HTMLプレビューツール、および特定のコンテンツセキュリティポリシー(CSP)設定という、一見無害な3つの機能の組み合わせから生じていました。攻撃者が悪意のある会話を作成して公開共有することで、サインインしているユーザーを騙して、ユーザー自身のウェブセッションと同じ権限で実行されるコードを実行させることができ、事実上、攻撃者にユーザーの認証済みAPIへのアクセス権を付与することが可能になります。

この視覚資料は、公開共有機能がどのように利用されてユーザーのセッションに悪意のあるコンテンツを注入したかを示しています。
技術的な仕組みは、MathLiveと呼ばれる数学ライブラリを含む「サンドボックス脱出」に依存していました。ChatGPTのプレビュー機能は通常、コードを制限されたフレーム内に隔離しますが、MathLiveライブラリは画面上のキーボード用のメッセージを処理するために、メインのChatGPTページにリスナーをインストールしていました。このリスナーは受信メッセージのオリジンを検証しなかったため、隔離されたプレビューフレームからメインページへ`postMessage`を送信することができました。このメッセージはメインページに対し、生のHTMLを含む新しいキーボードレイアウトを描画するよう指示を出しました。研究チームは、メインページの`createHTML`ヘルパーがこの入力をサニタイズ(無害化)できず、`srcdoc`属性を持つ`iframe`の注入を許容していることを発見しました。メインページがこのフレームを作成したため、ブラウザはそのフレームに`chatgpt.com`のアイデンティティを付与し、プレビューツールの標準的な隔離をバイパスしました。
インラインスクリプトをブロックするサイトのコンテンツセキュリティポリシー(CSP)を回避するために、研究チームはYouTubeのoEmbedエンドポイントからのJSONPスタイルのコールバックを利用しました。ChatGPTのCSPはYouTubeからのスクリプトを許可していたため、研究チームは特別に作成されたコールバックを使用して、新しく作成されたフレーム内で任意のJavaScriptを実行しました。実行に成功した後、チームはChatGPTのバックエンドAPIを呼び出して、被害者の最近の会話を列挙し、一度も共有されたことのないプライベートなチャットの内容を取得できることを実証しました。OpenAIは、クロスフレームメッセージを拒否するようにウェブフロントエンドを更新することでこの問題に対処し、この報告をP1(高優先度)の深刻度バグとして分類しました。研究チームは、このバグがシステムの複雑性の結果であり、個々のコンポーネントは単体では正しく機能するものの、単一のページ内で組み合わされることで危険な経路を生み出したと指摘しました。

この画像は、発見された脆弱性を使用してプライベートなチャット内容を取得できるという研究チームの能力を視覚的に証明するものです。