CVE-2025-46818Redis是一个开源的内存数据库,支持数据持久化到磁盘。CVE-2025-46818是Redis 8.2.1及以下版本中存在的一个Lua脚本沙箱逃逸漏洞。该漏洞允许经过身份验证的用户利用特制的Lua脚本来操纵不同的Lua对象,并有可能在另一个用户的上下文中运行自己的代码。该问题存在于所有支持Lua脚本功能的Redis版本中。
该漏洞的CVSS评分为6.0,属于中危级别。虽然攻击需要本地访问权限和低权限认证,但用户交互是必需的。攻击成功后,攻击者可以获得高机密性和完整性影响,但不会影响系统可用性。
Redis官方已在8.2.2版本中修复了该漏洞。修复方案包括对Lua脚本执行环境进行加固,防止恶意脚本访问或操纵其他用户的Lua对象。对于无法立即升级的用户,可以通过ACL(访问控制列表)阻止EVAL和FUNCTION命令族来缓解该问题,从而防止用户执行Lua脚本。
此漏洞的危害性在于,Redis通常被多个应用或用户共享使用,攻击者可以利用此漏洞突破Lua沙箱的限制,在其他用户的上下文中执行任意代码,从而窃取敏感数据或进行未授权的操作。
Redis内置了Lua脚本引擎,允许用户通过EVAL、EVALSHA等命令执行Lua脚本。为了安全起见,Redis使用沙箱机制来限制Lua脚本的权限,防止脚本访问底层系统资源或执行危险操作。
该漏洞的核心问题在于Redis的Lua沙箱实现存在缺陷。攻击者可以构造特制的Lua脚本,利用沙箱中的类型混淆或对象操纵漏洞,绕过沙箱的安全限制。具体而言,攻击者可以通过操纵Lua对象(如字符串、表、函数等)的内部结构,实现以下攻击效果:
1. **对象类型混淆**:通过修改Lua对象的元表(metatable)或内部字段,将一个受限制的对象转换为不受限制的对象。
2. **沙箱逃逸**:利用Redis提供的某些API函数(如redis.call、redis.pcall等)的实现缺陷,在沙箱外执行代码或访问受限资源。
3. **上下文劫持**:通过操纵全局Lua环境中的变量或函数,实现在其他用户上下文中的代码执行。
成功利用此漏洞后,攻击者可以在其他Redis用户的上下文中执行任意Lua代码,这可能导致敏感数据泄露、数据篡改或权限提升。攻击需要本地访问权限(AV:L),需要低权限认证(PR:L),且需要用户交互(UI:R),这意味着攻击通常需要受害者执行或触发恶意Lua脚本。