CVE-2025-49844漏洞深度解析:RediShell——Redis中的严重远程代码执行漏洞
CVE ID: CVE-2025-49844
漏洞名称: RediShell (由Wiz安全团队命名)
CVSS 评分: 10.0 (严重)
漏洞类型: 内存损坏 (Use-After-Free, UAF) 导致的远程代码执行 (RCE)
受影响产品: Redis 数据库
一、 漏洞概述
CVE-2025-49844,又称“RediShell”,是Redis数据库中一个极其严重的远程代码执行(RCE)漏洞。该漏洞允许经过身份验证的攻击者,通过精心构造的恶意Lua脚本,在目标Redis服务器上实现任意原生代码执行。鉴于其最高级别的CVSS评分10.0,以及对Redis广泛使用的影响,此漏洞对全球的Redis用户构成了重大威胁。
二、 漏洞原理剖析
“RediShell”的核心是一个“释放后使用”(Use-After-Free, UAF)内存损坏漏洞,存在于Redis内置的Lua脚本引擎中。Lua引擎在执行脚本时,会管理各种数据对象(包括字符串,即TString对象)的内存分配和垃圾回收(GC)。
关键缺陷在于:
- 未锚定对象的提前释放: 攻击者可以构造一种特定的Lua脚本执行序列。在这种序列中,一个关键的
TString对象在被Lua垃圾回收机制处理时,未能被正确“锚定”(即被引用,以防止其被过早回收)。 - 时序竞争: 通过精确控制内存分配和垃圾回收的时序,攻击者能够诱导Lua引擎在某个
TString对象被程序逻辑预期仍然有效时,将其内存提前释放。 - Use-After-Free 触发: 随后,当Lua引擎中的代码尝试访问这个已经被释放的内存区域时,就会触发UAF漏洞。此时,该内存区域可能已经被其他数据重新分配和占用。
- 沙箱逃逸与RCE: 利用UAF漏洞,攻击者可以篡改程序执行流,绕过Lua沙箱的限制。通过向被释放的内存区域写入恶意数据,并控制后续的内存访问,攻击者最终能够注入并执行任意的机器代码,从而完全控制Redis服务器。
这一漏洞的复杂性在于其对Lua垃圾回收机制的精确操纵,以及对内存布局的细致理解。它的存在时间超过13年,影响了几乎所有支持Lua脚本的Redis版本,凸显了此类深层内存安全问题难以发现和修复的挑战。
三、 影响范围
此漏洞影响所有支持Lua脚本的Redis版本,具体包括:
- 所有版本低于 6.2.20 的 Redis 6.2.x 系列
- 7.2.0 <= Redis < 7.2.11 (7.2.x 系列)
- 7.4.0 <= Redis < 7.4.6 (7.4.x 系列)
- 8.0.0 <= Redis < 8.0.4 (8.0.x 系列)
- 8.2.0 <= Redis < 8.2.2 (8.2.x 系列)
简而言之,绝大多数未经及时更新的Redis实例都可能受到此漏洞的影响。
四、 攻击前提条件
尽管漏洞的严重性极高,但成功利用仍需满足以下条件:
- 网络连接: 攻击者必须能够与目标Redis实例建立网络连接。
- 身份验证: 攻击者需要拥有有效的Redis认证凭据。如果目标Redis实例未启用认证(例如,
requirepass未配置),则攻击者无需凭据即可发起攻击。 - Lua脚本执行权限: 攻击者需要具备执行Lua脚本的权限,即能够调用
EVAL或EVALSHA命令。 - 精确的时序控制: 攻击者必须能够精确控制内存分配和垃圾回收的时序,以成功触发UAF。
五、 漏洞影响
一旦成功利用CVE-2025-49844,攻击者将获得对Redis服务器的完全控制权,可能导致以下严重后果:
- 数据窃取、篡改或删除: 攻击者可以访问、修改或删除Redis中的所有敏感数据。
- 部署恶意软件: 在服务器上部署挖矿程序、勒索软件或其他恶意软件。
- 横向渗透: 利用受感染的Redis服务器作为跳板,进一步渗透到企业内部网络或云环境中。
- 服务中断: 破坏Redis服务,导致业务中断。
六、 漏洞时间线
- 2025年5月16日: Wiz研究团队在Pwn2Own Berlin安全竞赛中首次发现此漏洞,并私下向Redis官方团队报告。
- 2025年5月至9月: Redis团队与Wiz团队密切合作,进行漏洞分析、确认并开发修复补丁。
- 2025年10月3日: Redis官方发布安全公告,并同步发布包含修复补丁的更新版本。
- 2025年10月6日: Wiz安全团队发布了详细的公开研究报告,并将此漏洞命名为“RediShell”。
- 目前: 针对该漏洞的概念验证(PoC)代码已在公共领域流传。
七、 修复建议与缓解措施
为了防范“RediShell”漏洞的攻击,强烈建议所有Redis用户立即采取以下措施:
-
立即升级Redis版本 (强烈推荐):
这是最有效和最直接的修复方案。请尽快将您的Redis实例升级到以下修复版本:- Redis 6.2.20 及更高版本
- Redis 7.2.11 及更高版本
- Redis 7.4.6 及更高版本
- Redis 8.0.4 及更高版本
- Redis 8.2.2 及更高版本
-
临时缓解措施 (如果无法立即升级):
如果暂时无法进行版本升级,可以通过限制或禁用Lua脚本功能来降低风险:- 限制
EVAL和EVALSHA命令: 使用Redis的ACL(访问控制列表)功能,限制或禁用低权限用户对EVAL和EVALSHA命令的访问。对于非必要的业务,甚至可以完全禁用这两个命令。
- 限制
-
加强身份验证和网络隔离:
- 启用强认证: 确保所有Redis实例都启用了强密码认证,并且密码应足够复杂。
- 不暴露到公网: 绝不允许未经认证或带有弱密码的Redis实例直接暴露在公共互联网上。
- 防火墙规则: 配置防火墙规则,限制只有受信任的内部系统才能访问Redis端口。
- 最小权限原则: 遵循最小权限原则,为连接Redis的应用程序分配必要的最低权限。
八、 总结
CVE-2025-49844“RediShell”漏洞再次提醒我们,即使是成熟和广泛使用的软件,也可能存在深层次的安全缺陷。对Redis用户而言,及时更新是抵御此类高级威胁的关键。通过立即升级到修复版本,并结合严格的身份验证和网络隔离策略,可以最大限度地降低风险,保护您的数据和系统安全。