本文来自微信公众号:浮之静(ID:fuzjing),作者:lencx,原文标题:《严重漏洞:导致 1.2% ChatGPT Plus 用户部分信息泄露》,头图来自:《冒牌天神》剧照


本周早些时候,由于一个开源库中的一个错误,ChatGPT 服务出现了严重的漏洞。这个错误导致一些用户可以看到另一个活动用户聊天历史记录中的标题,而且新创建的对话的第一条消息也有可能会在另一个用户的聊天历史记录中可见。


ChatGPT 立即下线并修复了这个错误,成功地恢复了服务和聊天历史记录功能,除了几个小时的历史记录外。ChatGPT 承诺在下面发布更多有关此问题的技术细节(查看原文:March 20 ChatGPT outage: Here’s what happened[1]


经过深入调查,ChatGPT 还发现,同样的错误可能会导致1.2%的 ChatGPT Plus 订阅用户在特定的九个小时时间窗口内意外地看到与支付相关的信息。在周一 ChatGPT 下线[2]之前的几个小时内,一些用户可能会看到另一个活动用户的姓名、电子邮件地址、支付地址、信用卡号码的最后四位数字(仅限),以及信用卡到期日期。完整的信用卡号码在任何时候都没有被公开。ChatGPT 相信,实际上被公开给他人的用户数据数量非常少。


为了访问这些信息,ChatGPT Plus 订阅用户需要执行以下操作:在太平洋时间 3 月 20 日上午 1 点至 10 点之间收到的订阅确认电子邮件;或者在太平洋时间 3 月 20 日上午 1 点至 10 点之间,在 ChatGPT 中点击“我的账户”,然后点击“管理我的订阅”。


在这期间,另一个ChatGPT Plus 用户的姓名、电子邮件地址、支付地址、信用卡号码的最后四位数字(仅限)、信用卡到期日期可能会可见。ChatGPT 已经联系受影响的用户并通知他们可能已经泄露了他们的付款信息。ChatGPT 有信心用户的数据不存在持续的风险。


OpenAI 的所有成员都致力于保护用户的隐私和数据安全,这也是他们的责任。不幸地是,本周未能兑现这一承诺,未能达到用户的期望。所以 OpenAI 团队也再次向用户和整个 ChatGPT 社区道歉,并将努力重建信任。


一、技术细节


该漏洞是在 Redis 客户端开源库 redis-py[3] 中发现的。OpenAI 一发现该漏洞,就向 Redis 维护者发送了一个修复问题的补丁。以下是该漏洞的工作原理:


  • 我们使用 Redis 在服务器中缓存用户信息,这样我们不需要为每个请求检查我们的数据库。


  • 我们使用 Redis Cluster 将这个负载分布到多个 Redis 实例中。


  • 我们使用 redis-py 库从我们的 Python 服务器与 Redis 进行交互,该服务器使用 Asyncio 运行。


  • 该库在服务器和集群之间维护一组共享连接池,并在完成后将连接回收以供另一个请求使用。


  • 在使用 Asyncio 时,redis-py 的请求和响应行为类似于两个队列:调用者将请求推送到传入队列中,然后从传出队列中弹出响应,然后将连接返回给池。


  • 如果在将请求推送到传入队列之后,但在从传出队列中弹出响应之前取消了请求,我们会看到我们的漏洞:连接变得损坏,下一个为不相关请求出队列的响应可能会接收连接中留下的数据。


  • 在大多数情况下,这会导致无法恢复的服务器错误,用户将不得不重试他们的请求。


  • 但在某些情况下,损坏的数据恰好匹配请求者所期望的数据类型,因此从缓存中返回的内容似乎是有效的,即使它属于另一个用户。


  • 在太平洋时间 3 月 20 日星期一上午 1 点,我们不经意间引入了一项更改,导致 Redis 请求取消激增。这为每个连接返回错误数据创造了一个小概率。


该漏洞仅出现在 Redis Cluster 的 Asyncio redis-py 客户端中,并已得到修复。


二、采取措施


在 OpenAI 的调查结束后,支持和通知 ChatGPT 用户是 OpenAI 的首要任务。所以采取了以下行动来改善系统:


  • 广泛测试了我们对潜在漏洞的修复措施。


  • 添加了冗余检查,以确保我们的 Redis 缓存返回的数据与请求用户匹配。


  • 对我们的日志进行了程序化检查,以确保所有消息只对正确的用户可用。


  • 相关几个数据源,以精确识别受影响的用户,以便我们通知他们。


  • 改进了日志记录,以便识别何时发生问题并完全确认问题已经停止。


  • 改进了我们的 Redis 集群的强度和规模,以减少在极端负载下连接错误的可能性。


三、下一步计划


Redis 开源维护者一直是 OpenAI 优秀的合作伙伴,迅速解决了漏洞并推出了补丁。Redis 以及其他开源软件在 OpenAI 的研究工作中发挥了至关重要的作用。它们的重要性不容小视——如果没有 Redis,OpenAI 将无法扩展 ChatGPT。OpenAI 也致力于继续支持和贡献给 Redis 社区。


四、思考


ChatGPT 在为人类梦想插上翅膀的同时,所需要肩负的责任也会越来越重大(用户隐私,数据安全是永远无法绕开的话题)。ChatGPT 插件的推出,让人们看到了 AI 更大的可能性。或许正如 OpenAI 所说的,会给互联网带来一种新的范式(你通过自然语言描述需求,AI 会按照你的需求来检索内容,或者直接生成不存在的内容)。它最先颠覆的是传统搜索问题,检索信息的方式,其次就是思维模式的转变。


References:

[1]March 20 ChatGPT outage: Here’s what happened: https://openai.com/blog/march-20-chatgpt-outage

[2]周一 ChatGPT 下线: https://www.theverge.com/2023/3/21/23649806/chatgpt-chat-histories-bug-exposed-disabled-outage

[3]redis-py: https://github.com/redis/redis-py

[4]AsyncIO Race Condition Fix: https://github.com/redis/redis-py/pull/2641

[5]Off by 1 - Canceling async Redis command leaves connection open, in unsafe state for future commands: https://github.com/redis/redis-py/issues/2624


本文来自微信公众号:浮之静(ID:fuzjing),作者:lencx