通过 Redis 8.2.1 中已弃用的 Lua API 和可变元表实现沙箱逃逸。
Redis 8.2.1 仍向脚本暴露已弃用的 Lua 内置函数(getfenv、setfenv、newproxy),且未能锁定基本类型的元表。攻击者可以向共享元表中注入方法、捕获特权环境,并以其他用户的权限执行命令。
redis-cliCVE-2025-46818.lua – 验证已弃用的内置函数是否存在,修补字符串元表,并暴露一个辅助函数。# 设置
redis-cli -h localhost -p 6379 --eval CVE-2025-46818.lua
# 调用注入的辅助函数(假设受害用户具有更高权限):
redis-cli -h localhost -p 6379 EVAL "return ('test').escalate()" 0
预期结果:
在 8.2.1 上,初始脚本报告已弃用的 API 为 true,并确认元表修改成功。后续调用返回 ACL WHOAMI 的输出(或你替换的任何特权命令)。Redis 8.2.2 默认移除这些 API,将基本元表设为只读,并记录尝试行为。
升级到 Redis 8.2.2 或更高版本,或对不受信任的用户禁用 Lua,或使用 lua-enable-deprecated-api no 运行。