ChatGPT數據泄露,技術細節公布[ChatGPT泄漏事件]?
在上周一,ChatGPT 遭遇了一次用戶數據泄漏事件,許多 ChatGPT 的用戶都在自己的歷史對話中看到了其他人的對話記錄。不光是對話的歷史記錄,不少 ChatGPT Plus 用戶還在 Reddit 和 Twitter 等平臺發出了截圖,表示在他們的訂閱頁面上看到了其他人的電子郵件地址。
事件發生后,OpenAI 臨時關閉了 ChatGPT 服務以調查問題,后續 Open AI 的首席執行官 Sam Altman 也親自發了推文,承認他們確實遭遇了重大問題,不過當時并沒有公布問題的細節,只表示是一個開源庫的錯誤導致的。
由于一個開源庫的錯誤,我們在 ChatGPT 中出現了一個重大問題,現在已經發布了一個修復程序,我們剛剛完成了驗證。
一小部分用戶能夠看到其他用戶的對話歷史的標題。
經過多日的調查,OpenAI 日前發布了一份包含技術細節的事件報告,該事件是 Redis 客戶端開源庫中的一個錯誤所引發的,導致 ChatGPT 服務暴露了其他用戶的聊天查詢歷史和大約1.2% 的 ChatGPT Plus 用戶的個人信息。
技術細節
這個錯誤是在 Redis 客戶端開源庫 redis-py 中發現的。發現這個 bug 后,OpenAI 就立即聯系了 Redis 的維護者,提供了一個補丁來解決這個問題。以下是這個錯誤的具體細節:
OpenAI 使用 Redis 在他們的服務器中緩存用戶信息,所以 ChatGPT 不需要為每個請求檢查數據庫。
OpenAI 使用 Redis Cluster 將這一負載分布到多個 Redis 實例上。
OpenAI 使用 redis-py 庫,以便讓用了 Asyncio 的 Python 服務器與 Redis 對接。
該庫在服務器和集群之間維護一個共享的連接池,并在完成后回收連接以用于另一個請求。
當使用 Asyncio 時,redis-py 的請求和響應表現為兩個隊列:調用者將請求推送到傳入隊列,并從傳出隊列中彈出響應,然后將連接返回到池中。
如果在請求被推送到傳入隊列之后,但在響應從傳出隊列中彈出之前,請求被取消,我們就會看到錯誤:連接因此被破壞,下一個為不相關的請求出列的響應可以接收連接中留下的數據。
在大多數情況下,這會導致一個無法恢復的服務器錯誤,而用戶將不得不重新嘗試他們的請求。
但在某些情況下,損壞的數據恰好與請求者所期望的數據類型相匹配,因此從緩存中返回的數據看起來是有效的,即使這些數據屬于另一個用戶。
在太平洋時間3月20日星期一凌晨1點,OpenAI 無意中給他們的服務器引入了一個變化,導致 Redis 請求取消的情況激增。這在一定程度上引發了每個連接返回錯誤數據的可能性。
這個錯誤只出現在 Redis Cluster 的 Asyncio redis-py 客戶端,現在已經被修復。
經過深入調查,OpenAI 發現一些用戶有可能看到其他活躍用戶的姓名、電子郵件地址、賬單地址、信用卡號碼的最后四位數和信用卡到期日,OpenAI 特別強調道,完整的信用卡號碼并沒有暴露。
這部分受影響的用戶占 ChatGPT Plus 用戶總數的1.2%,目前他們正在聯系了所有受影響的 ChatGPT 用戶。