【漏洞预警】Redis 频发高危漏洞

近日白帽汇安全研究院关注到redis频繁出现漏洞,有安全人员放出redis exp,并且有相关关于redis的漏洞讨论,其中多个redis漏洞会引发远程代码执行和拒绝服务攻击。Redis是美国Redis Labs公司赞助的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。Lua subsystem是其中的一个支持Lua脚本语言的子系统。

根据华顺信安FOFA系统数据显示,目前全网共有  94815个系统对外开放。由于Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射,被广泛应用于各类系统平台或设备中,该漏洞将影响众多的企业和厂商,需要相关企业、平台厂商高度重视。 

image.png

  全球分布情况(仅为分布情况,非漏洞影响情况)

image.png 

国内分布情况(仅为分布情况,非漏洞影响情况) 

漏洞原理与危害 

由于Redis从2.6.0版本开始在默认正常安装情况下,原生集成Lua支持,并不需要单独配置开启,并且在不打补丁的情况下不能有效通过配置文件进行关闭Lua的支持。这些漏洞利用场景为在远程攻击者连接访问到Redis服务后进行执行攻击。由于Redis服务默认开启并不需要认证,同时绑定了0.0.0.0这个地址。在外网服务器运行时,即可对外开放端口。任意攻击者可通过未授权访问到redis。或者通过系统的SSRF漏洞利用,访问到内网中开放的Redis服务,另外服务商云托管的Redis服务器也会被利用,访问到Redis后通过利用这些redis漏洞进行任意代码执行或拒绝服务。建议广大企业厂商对redis进行配置授权访问。

以下为相关漏洞分析:

00x01 Redis Lua沙盒逃逸漏洞导致可以执行任意字lua字节码,进而实现可执行任意代码

CVE 编号:CVE-2015-4335

Redis服务端实现了LUA沙盒机制,屏蔽了LUA的OS、文件操作等部分危险函数调用,但是未过滤loadstring函数,通过此机制可实现Redis服务器内存读写操作,进而达成代码执行目的,因为在可以读写任意内存地址前提下,我们可以精确控制CClosure对象的f指针,使其执行linux系统的system函数。然后将其L对象内存填充为命令字符串。远程攻击者可执行eval命令利用该漏洞执行任意Lua字节码。本文以Centos 6.9 x64 + Redis2.8.0 为例测试执行任意代码。

redis-1.gif

该漏洞影响版本:Redis 2.8.1之前版本和3.0.2之前3.x版本。

00x02 Redis  Lua子系统缓冲区错误漏洞,可造成拒绝服务或执行任意代码。

CVE 编号:CVE-2018-11218

该漏洞是由于Redis Lua 子系统中存在 cmsgpack 库存在基于栈的缓冲区溢出,该漏洞源于程序没有执行正确的内存操作。远程攻击者可通过发送请求利用该漏洞造成拒绝服务或执行任意代码。本文以Centos 6.9 x64 + Redis3.2.10为例测试执行击溃Redis服务。

redis-cmsgpack2.gif

该漏洞影响版本:Redis 3.2.12之前版本、4.0.10之前的4.x版本和5.0 RC2之前的5.x版本。

00x03 Redis  Lua子系统数字错误漏洞,可造成拒绝服务或执行任意代码。

CVE 编号:CVE-2018-11219

该漏洞由于Redis Lua子系统的struct库存在整数溢出漏洞。远程攻击者可通过发送请求利用该漏洞执行任意代码或造成拒绝服务。本文以Centos 6.9 + Redis 3.2.10 为例测试击溃Redis服务。

redis-struct.gif

该漏洞影响版本为:Redis 3.2.12之前版本、4.0.10之前的4.x版本和5.0 RC2之前的5.x版本。

 修复建议 

 1、根据官方提供补丁进行修复。 

 2、升级Redis至最新版本。  

 白帽汇会持续对该漏洞进行跟进。后续可以关注本链接 


参考

[1] https://github.com/360-A-Team/redis_lua_exploit

[2] http://antirez.com/news/119

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐