ElasticSearch RCE(CVE-2014-3120)
前言
参考披露的报告复现
漏洞类型:RCE
影响版本:ElasticSearch < 1.2.0
漏洞复现
漏洞代码
通过源码审计发现,该漏洞的核心问题在于默认配置下 script.disable_dynamic 参数为 false,导致动态脚本功能完全开放
1 | // ElasticSearch 1.1.x 版本中 ScriptService.java 的关键代码 |
利用链
请求入口:TransportSearchAction.java
1 | // elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java |
脚本解析:QueryParseContext.java
1 | // elasticsearch/src/main/java/org/elasticsearch/index/query/QueryParseContext.java |
脚本执行引擎初始化:ScriptService.java
1 | // elasticsearch/src/main/java/org/elasticsearch/script/ScriptService.java |
MVEL脚本引擎实现:MvelScriptEngineService.java
1 | // elasticsearch/src/main/java/org/elasticsearch/script/mvel/MvelScriptEngineService.java |
缺陷分析:
无沙盒机制:MVEL 引擎直接执行任意代码
无权限控制:脚本可访问所有 Java 类和方法
无输入过滤:
script.getIdOrCode()直接传递给 MVEL 编译器
POC
1 | POST /_search?pretty |