2023年3月20日午前1時(太平洋時間)、OpenAIはChatGPTのサーバーに変更を導入し、それがRedisリクエストのキャンセルの急増を引き起こした。OpenAIは、リクエストごとにデータベースへ問い合わせる必要をなくすためRedisをユーザー情報のキャッシュに使用しており、そのPythonサーバーはredis-pyライブラリを通じてキャッシュと通信し、このライブラリはリクエスト間で接続を再利用する。

Asyncioでは、リクエストがキューに入った後、応答が到着する前にキャンセルされると接続が破損し、次に来る無関係なリクエストがその中に残されたデータを受け取る可能性がある。場合によっては返されたデータがリクエスト元の期待と一致したため、あるユーザーが別のアクティブユーザーのチャット履歴のタイトルを見ることがあり、さらに9時間の時間枠の中で、一部のChatGPT Plus購読者が別のユーザーの氏名、メールアドレス、支払い先住所、カード種別、有効期限、カード番号の下4桁を見ることができた。カード番号の全体が露出したことはなかった。

OpenAIはChatGPTをオフラインにし、redis-pyのバグにパッチを適用し、リクエストごとの冗長なデータチェックを追加し、ログ記録を改善し、影響を受けたユーザーに通知した。露出した請求情報は、その時間枠にアクティブだったChatGPT Plus購読者の1.2%に及んだと推定し、データが実際に他人に明らかになったユーザーの数は極めて少なかったと述べた。

ChatGPTはオフラインにされ、アクティブなChatGPT Plus購読者の1.2%の支払い関連情報が9時間の時間枠で露出した — カード番号の全体は露出しなかった。

共有接続プールは、キャンセルされたリクエストが後の応答を破損することはないと想定していた — これがredis-pyの競合状態である。

3月20日の変更によりキャンセルが急増し、まれなバグが現実的な露出へと変わった。

ChatGPTのキャッシュには個人データと支払いデータが保持されていたため、キャッシュのバグがプライバシーインシデントとなった。

キャッシュ経路のどこでも、返されたデータがリクエスト元のユーザーに属することを提供前に検証していなかった。

プールされたキャッシュ接続が複数のユーザーにサービスを提供する場合、すべての応答をリクエスト元に対して検証する必要がある — そしてキャンセルを急増させる変更は、単なる障害ではなく分離の破綻となり得る。

OpenAIは数日以内に(数時間分を除いて)チャット履歴を復旧し、Redisのメンテナーはパッチをリリースした。このインシデントは直ちに規制当局の注目を集めた。3月31日、イタリアのGaranteは他の懸念とともに3月20日のデータ侵害を理由にChatGPTを一時的に禁止し、OpenAIは最大2000万ユーロまたは全世界売上高の4%の罰金の可能性に直面しながらイタリアでサービスを無効化した。この事例は、AIサービスのキャッシュ層がスケーリングの問題をいかに迅速にデータ保護の危機へと変え得るかの参照点となった。

出典をたどる

出典

  1. March 20 ChatGPT outage: Here's what happened OpenAI · web.archive.org ·
  2. A bug revealed ChatGPT users' chat history, personal and billing data Help Net Security · helpnetsecurity.com ·
  3. Italy curbs ChatGPT, starts probe over privacy concerns Reuters · tech.yahoo.com ·