2023 年 3 月 20 日太平洋時間凌晨 1 點,OpenAI 對 ChatGPT 的伺服器引入了一項變更,導致 Redis 請求取消數量激增。OpenAI 使用 Redis 快取使用者資訊,以免每次請求都必須查詢資料庫;其 Python 伺服器透過 redis-py 程式庫與快取通訊,而該程式庫會在不同請求之間重複使用連線。

在 Asyncio 下,若請求在排入佇列之後、回應抵達之前被取消,就會損壞該連線;接下來一個無關的請求便可能收到殘留在連線中的資料。在某些情況下,回傳的資料恰好符合請求者的預期,因此有一名使用者看到了另一名活躍使用者的聊天記錄標題;而在為期九小時的時間窗口內,部分 ChatGPT Plus 訂閱者可能看到另一名使用者的姓名、電子郵件、帳單地址、卡片類型、到期日以及卡號末四碼。完整的卡號從未外洩。

OpenAI 將 ChatGPT 下線,修補了 redis-py 中的錯誤,新增了對每個請求資料的冗餘檢查,改善了日誌記錄,並通知了受影響的使用者。OpenAI 估計,外洩的帳單資訊涉及該時間窗口內活躍的 ChatGPT Plus 訂閱者中的 1.2%,並表示資料實際被揭露給他人的使用者人數極少。

ChatGPT 被下線;在為期九小時的時間窗口內,活躍 ChatGPT Plus 訂閱者中有 1.2% 的付款相關資訊外洩——完整卡號並未外洩。

共享連線池假設已取消的請求不會損壞後續的回應——這正是 redis-py 的競爭條件(race condition)。

3 月 20 日的變更導致取消請求數量激增,使一個罕見的錯誤變成真實的資料外洩風險。

ChatGPT 的快取存放了個人與付款資料,因此一個快取錯誤演變成隱私事件。

快取路徑上沒有任何機制在提供資料前驗證回傳的資料是否屬於發出請求的使用者。

當共用的快取連線服務多名使用者時,每個回應都必須對照請求者進行驗證——而一項導致取消請求激增的變更,是潛在的隔離失效,而不只是服務中斷。

OpenAI 在數日內恢復了聊天記錄(少了幾小時的資料),Redis 維護者也發布了修補程式。此事件立即引起監管機關關注:3 月 31 日,義大利的 Garante 以 3 月 20 日的資料外洩等疑慮為由,暫時禁用 ChatGPT,OpenAI 則在義大利停用該服務,同時面臨最高 2,000 萬歐元或全球營業額 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 ·