RSS Feed
更好更安全的互联网

ElasticSearch Groovy 脚本 远程代码执行漏洞 应急概要

2015-03-06

QQ图片20150309155346

知道创宇安全研究团队    2015 . 03 . 06

本文 PDF 下载:ElasticSearch Groovy 脚本远程代码执行漏洞应急概要V4


 

一、漏洞概要

 

2015 年 03 月 05 日,ElasticSearch 惊爆严重安全漏洞,编号为 CVE-2015-1427 ,该漏洞将导致远程攻击者在受影响的系统上执行任意代码。

 

二、漏洞描述

 

ElasticSearch 是一个 JAVA 开发的搜索分析引擎。2014 年,曾经被曝出过一个远程代码执行漏洞( CVE-2014-3120 ),漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码( MVEL ),作为表达式进行数据操作,攻击者可以通过 MVEL 构造执行任意 Java 代码,后来脚本语言引擎换成了 Groovy ,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行。

 

三、漏洞影响

 

受影响版本:

1.4:  1.4.2 ,  1.4.1 ,  1.4.0 ,  1.4.0.Beta1

1.3:  1.3.7 ,  1.3.6 ,  1.3.5 ,  1.3.4 ,  1.3.3 ,  1.3.2 ,  1.3.1 ,  1.3.0.

 

四、漏洞分析

 

产生漏洞代码在实现沙盒的类是 com.elasticsearch.script.groovy.GroovySandboxExpression-Checker ,它订制了 Groovy 的沙盒,对表达式进行了安全检测,但是这个沙盒与 Java 的 SecurityManager 那种沙盒是不同的,从代码中可以看到这个沙盒,只是根据黑白名单,在表达式语义上判断表达式是否合法的,可以说是一个“浅”沙盒。

具体的代码流程如下图:

image003

允许调用白名单的如下:

image005

从上面的白名单中可以看到,允许构造对象和方法调用的类,都是一些常规类,没有我们可以利用的类,而且如果我们想要利用反射去调用我们想调用的类,方法黑名单中又限制了 getClass 的调用,我们无法通过 getClass 方法获取 Class 对象,但是我们可以看到方法白名单中,并没有对 forName 方法进行限制,也就是说,如果我们能获取到 Class 对象,再调用 forName 方法就可以获取到我们想访问的类。

漏洞原文出处:http://drops.wooyun.org/papers/5107

 

五、漏洞验证

 

可以使用以下命令对 ElasticSearch 系统进行漏洞检测。

在 Bash下运行

1


六、ZoomEye应急概要

 

ElasticSearch Groovy 脚本远程代码执行是一个严重的漏洞,黑客可以直接控制存着这个漏洞的服务器.

来自知道创宇的 ZoomEye 团队(钟馗之眼网络空间探知系统)通过几种方式的组合检测,得到了些影响结论。

注意:以下这些影响都是可被直接远程攻击的,属于高危级别!

第一组数据    2015 / 03 / 04

我们基于 ZoomEye 库里的 53469 个 9200 端口 IP ,进行本次漏洞检测,受本次漏洞影响可被远程访问的主机数为 3852 个,其中中国大陆有 245 台外网可访问的 ElasticSearch 服务器受到影响.

第二组数据    2015 / 03 / 05

我们又对 2014 公布的 ElasticSearch 远程任意代码执行漏洞 ( CVE-2014-3120 ) 和这次爆出的漏洞 ( CVE-2015-1427 ) 漏洞都进行了检测。

受  CVE-2014-3120 影响的主机数为 583

受  CVE-2015-1427 影响的主机数为 3843

 

七、修复建议

 

方法一:升级到官方最新版本

方法二:在 ElasticSearch 文件下 /config/elasticsearch.yml 中加入:script.groovy.sandbox.enabled: false

 

八、相关资源链接

 

知道创宇官网:http://www.knownsec.com/
知道创宇旗下 - ZoomEye官网:http://www.zoomeye.org/
知道创宇旗下 - 加速乐云防御平台官网:http://www.jiasule.com/

作者:明冉 刘 | Categories:安全研究技术分享 | Tags:

发表评论