【通知】redis-py异步Bug(CVE-2023-28858/CVE-2023-28859)对Redis服务的影响

近期,Redis数据库Python客户端redis-py被暴露了一个Bug:使用异步接口,取消命令时可能导致用户业务数据读取出现错乱。

漏洞信息

redis-py是一款优秀的Redis客户端,支持同步和异步编程模式。它的底层具备共享连接池的特性,使得在执行完查询后,连接会被归还到连接池中,以便执行下一次查询。在异步模式下,如果调用cancel()方法取消命令执行,则会导致该命令返回的结果继续被保存到连接队列中,进而被下一条命令误读取。当两条命令的返回值可以相互匹配和解析时,就可能产生业务数据读取错乱的问题。

漏洞等级
  • CVE-2023-28858:高危,redis-py异步请求被取消时候可能向其余连接返回数据。
  • CVE-2023-28859:高危,CVE-2023-28858的修复版本并没有完全修复此问题,因此存在此漏洞。

影响范围

使用的redis-py版本低于(不包含)4.5.4(Python版本为3.8+)或4.4.4(Python版本为3.7+),使用了异步接口,且可能存在使用cancel()命令的用户。

安全建议

根据Python版本,升级redis-py至修复版本:4.5.4 (或4.4.4)版本及以上。