制作者 | OSC オープンソースコミュニティ (ID: oschina2013) 先週の月曜日、ChatGPTはユーザーデータ侵害に見舞われ、多くのユーザーがチャット履歴で他人の会話を発見しました。チャット履歴以外にも、多くのChatGPT PlusユーザーがRedditやTwitterなどのプラットフォームにスクリーンショットを投稿し、サブスクリプションページで他人のメールアドレスを確認したことを示唆しました。 この事件を受け、OpenAIは問題を調査するため、ChatGPTサービスを一時的に停止しました。その後、OpenAIのCEOであるサム・アルトマン氏は、 重大な問題が発生したことを認めつつも、当時は問題の詳細を明らかにしず、オープンソースライブラリのバグが原因であるとのみ述べました。 ChatGPTではオープンソースライブラリのバグにより重大な問題が発生しましたが、修正がリリースされ、検証が完了しました。 少数のユーザーは他のユーザーの会話履歴のタイトルを見ることができます。 OpenAIは数日間の調査を経て、技術的な詳細を含むインシデントレポートを最近公開しました。このインシデントはRedisクライアントのオープンソースライブラリのバグが原因で、ChatGPTサービスにおいて他のユーザーのチャットクエリ履歴とChatGPT Plusユーザーの約1.2%の個人情報が公開されました。 技術的な詳細 このバグは、Redisクライアントのオープンソースライブラリであるredis-pyで発見されました。OpenAIはこのバグを発見した後、直ちにRedisのメンテナーに連絡を取り、問題を解決するためのパッチを提供しました。このバグの具体的な内容は次のとおりです。 - OpenAI は Redis を使用してユーザー情報をサーバー上にキャッシュするため、ChatGPT はリクエストごとにデータベースをチェックする必要がありません。
- OpenAI は Redis Cluster を使用して、この負荷を複数の Redis インスタンスに分散します。
- OpenAI は redis-py ライブラリを使用して、Asyncio を使用する Python サーバーが Redis とインターフェースできるようにします。
- このライブラリは、サーバーとクラスター間の接続の共有プールを維持し、終了すると別の要求のために接続を再利用します。
- Asyncio を使用する場合、redis-py のリクエストとレスポンスは 2 つのキューで表されます。呼び出し元はリクエストを受信キューにプッシュし、送信キューからレスポンスをポップして、接続をプールに返します。
- リクエストが受信キューにプッシュされた後、応答が送信キューからポップされる前にキャンセルされた場合、エラーが表示されます。つまり、接続が切断され、無関係なリクエストのためにキューから取り出された次の応答が、接続に残されたデータを受け取ることができます。
- ほとんどの場合、これにより回復不可能なサーバー エラーが発生し、ユーザーはリクエストを再試行する必要があります。
- ただし、場合によっては、破損したデータが要求元が期待するデータ型と一致するため、データが別のユーザーに属している場合でも、キャッシュから返されたデータは有効であるように見えます。
- 3月20日(月)午前1時(太平洋時間)、OpenAIはサーバーに不注意による変更を導入し、Redisリクエストのキャンセルが急増しました。これにより、各接続で誤ったデータが返される可能性が高まりました。
- このバグは Redis Cluster Asyncio redis-py クライアントでのみ発生し、現在は修正されています。
OpenAIは徹底的な調査の結果、一部のユーザーが他のアクティブユーザーの名前、メールアドレス、請求先住所、クレジットカード番号の下4桁、クレジットカードの有効期限を閲覧できる可能性があることを発見しました。OpenAIは、クレジットカード番号全体が漏洩したわけではないことを特に強調しました。 影響を受けたユーザーは ChatGPT Plus ユーザー全体の 1.2% を占めており、現在、影響を受けるすべての ChatGPT ユーザーに連絡を取っています。 |