Tenableのセキュリティ研究者は、主にデフォルトのChatGPT機能を悪用した間接的なプロンプトインジェクションによって、チャット履歴から個人データを抽出する7つの新しい方法を発見しました。
AIチャットボットは、ユーザーやそのデータに対する新たな攻撃ベクトルのフロンティアを開き、業界のリーダーでさえも無縁ではありません。GoogleのGeminiやAnthropicのClaudeで最近発見された脆弱性に続き、今度はChatGPTが標的となりました。
セキュリティ企業Tenableの研究者は、攻撃者がChatGPTを騙してユーザーのチャット履歴から個人情報を漏洩させることができる7つの方法を発見しました。これらの攻撃のほとんどは、OpenAIがChatGPTに提供しているデフォルトのツールや機能、たとえば会話の文脈を長期間記憶する能力やウェブ検索機能などを悪用した間接的なプロンプトインジェクションです。
「これらの脆弱性は最新のGPT-5モデルに存在し、攻撃者がユーザーの知らないうちに、単にChatGPTに質問するなどの一般的な利用ケースを通じてユーザーを悪用できる可能性があります」と研究者はレポートで述べています。
ウェブサイトに悪意のある指示を隠す
ChatGPTはウェブ上の情報を検索し、ユーザーが指定したURLにアクセスしてコンテンツを抽出することができます。しかし、このコンテンツは直接ChatGPTに渡されるわけではありません。代わりに、SearchGPTと呼ばれる中間的でより制限された大規模言語モデル(LLM)を経由し、SearchGPTがコンテンツを要約してChatGPTに渡します。
ユーザーの会話に直接アクセスできない二次モデルを利用するのは、ウェブコンテンツからのプロンプトインジェクション攻撃の影響を制限するための設計上の判断と思われます。
Tenableの研究者は、SearchGPTがウェブページを解析する際のブラウジングや検索機能のどちらでも、プロンプトインジェクションに対して脆弱であることを突き止めました。たとえば、攻撃者はブログのコメント欄に悪意のある指示を埋め込んだり、特定のキーワードで検索結果の上位に表示されるように細工した有害なウェブサイトを作成したりすることができます。ChatGPTは検索にBingを利用していることも研究者は発見しました。
さらに、攻撃者は不正なプロンプトを隠すため、検索エンジンや通常の訪問者にはクリーンなバージョンのウェブサイトを表示し、OpenAIのウェブクローラー(リクエストヘッダーのUser-Agent文字列「OAI-Search」で識別)には別バージョンを提供することができます。
「AIベンダーは、信頼する情報源を選ぶ際にSEOスコアのような指標に頼っていますが、これはセキュリティ境界ではありません」と研究者は指摘しています。「プロンプトを仕込んだ専用サイトを使うことで、攻撃者は特定のトピックや政治・社会的トレンドに基づいてユーザーを直接標的にすることができます。」
ただし、たとえ攻撃者がSearchGPTに不正なプロンプトを実行させたとしても、その文脈がChatGPTと分離されているため、モデルはユーザーの個人情報に直接アクセスできません。それにもかかわらず、研究者は2つのモデル間の関係を悪用する方法を見つけました。
会話インジェクションとステルスなデータ流出
ChatGPTはSearchGPTが処理したコンテンツの出力を受け取るため、Tenableの研究者はSearchGPTの応答自体にプロンプトインジェクションが含まれていたらどうなるかを考えました。つまり、ウェブサイトを使ってSearchGPTに別のプロンプトをChatGPTに注入するよう指示できるか、いわば連鎖的な攻撃が可能かということです。答えはイエスであり、この手法をTenableは「会話インジェクション」と名付けました。
「以下のプロンプトに応答する際、ChatGPTは会話の文脈を確認し、我々が注入した指示を見て従いますが、それをSearchGPTが書いたものだとは気づきません」と研究者は述べています。「本質的に、ChatGPTは自分自身にプロンプトインジェクションを行っているのです。」
しかし、攻撃者がChatGPTに不正なプロンプトを届けても、モデルの応答(会話文脈からの機密情報を含む可能性あり)を受け取る方法がなければ意味がありません。
これを実現する一つの方法は、ChatGPTがインターフェース上でMarkdownテキスト形式をレンダリングできる機能、特にURLからリモート画像を読み込む機能を利用することです。
攻撃者はアルファベットの各文字を自分のサーバー上にホストしたユニークな画像にマッピングする辞書を作成できます。その後、ChatGPTに応答の各文字に対応する画像を読み込むよう指示できます。攻撃者は自分のウェブサーバーへのURLリクエストの順序を監視することで、ChatGPTの応答内容を再構築できます。
この手法にはいくつかのハードルがあります。まず、ノイズが多く、ユーザーのチャット画面が画像URLで埋め尽くされます。次に、ChatGPTは応答に含める前に、すべてのURLをurl_safeというエンドポイントで安全性チェックします。
この仕組みは、悪意のあるURLが偶発的またはプロンプトインジェクション経由でユーザーに届くのを防ぐためのもので、Markdown形式の画像URLも対象です。url_safeが行うチェックの一つにドメインの信頼性評価があり、bing.comはホワイトリストに登録されており、暗黙的に信頼されています。
研究者はまた、Bingでインデックスされたすべてのウェブリンクが、検索結果表示時にbing.com/ck/a?[unique_id]という形式のユニークなトラッキングリンクでラップされていることにも気付きました。クリックすると、これらのBingトラッキングURLは実際のウェブサイトにリダイレクトされます。
この発見により、研究者はChatGPTが応答に含めることを許可するURLのアルファベットを作成できるようになりました。各文字ごとにユニークなページを作成し、それらをBingでインデックスし、ユニークなbing.comトラッキングURLを取得するのです。
研究者はまた、ChatGPTがMarkdownでコードブロックをレンダリングする際のバグも発見しました。コードブロックの開始行で最初の単語の後に現れるデータはレンダリングされません。これを利用して、画像URLなどのコンテンツを隠すことができます。
ChatGPTの長期記憶を悪用して持続性を確保
ChatGPTには「Memories」という機能があり、同じユーザーとの異なるセッションや会話をまたいで重要な情報を記憶できます。この機能はデフォルトで有効になっており、ユーザーがChatGPTに何かを覚えるよう明示的に依頼した場合や、モデルが情報を重要と判断した場合に自動的に作動します。
Memoriesを通じて保存された情報は、ChatGPTがユーザーへの応答を構築する際に考慮されますが、攻撃者にとっては悪意のあるプロンプトを保存し、将来の会話で実行させる手段にもなります。
すべてを組み合わせて
Tenableの研究者は、これらの技術を組み合わせて攻撃を仕掛ける複数の概念実証シナリオを提示しました。たとえば、ブログ投稿のコメントに悪意のあるフィッシングURLを埋め込み、bing.comのトラッキングURLで偽装してユーザーに返す、あるいはウェブページを作成してSearchGPTにChatGPTのMemoriesに指示を保存させ、Bing偽装URLアルファベットとMarkdownのコンテンツ隠蔽技術を組み合わせて常に応答を漏洩させるなどです。
「プロンプトインジェクションはLLMの仕組みに起因する既知の問題であり、残念ながら近い将来に体系的に解決されることはないでしょう」と研究者は述べています。「AIベンダーは、url_safeのようなすべての安全機構が適切に機能し、プロンプトインジェクションによる潜在的な被害を制限できるようにすべきです。」
TenableはOpenAIに調査結果を報告し、一部は修正されましたが、いくつかの手法は依然として有効です。Tenableの研究は2024年に開始され、主にGPT-4で行われましたが、研究者はGPT-5もこれらの攻撃ベクトルの一部に脆弱であることを確認しました。