這幾天,有人公開了 Kibana 任意代碼執行漏洞(CVE-2019-7609)的 POC。這個漏洞的主要原理是因為 Kibana 中的 Timelion 中具有原型鍊污染漏洞,是以可以導緻指定變量的原型鍊污染,通過傳遞 NODE 環境變量參數,利用 Kibana 的 Canvas 會建立新程序的特性可以達到遠端執行指令的效果。
在本地嘗試搭建環境複現,忙活了半天,一開始嘗試的是 6.4.2 版本的 Kibana。嘗試執行指令的時候,發現一直沒有效果,才發現這個漏洞的利用還有一個重要的環節。在導緻原型鍊污染之後,還需要點選 Canvas 菜單,因為點選 Canvas 菜單,Kibana 會嘗試建立一個新的程序,進而可以達到遠端指令執行的效果。不過在 Kibana 6.5 版本之前,Canvas 不是預設安裝在 Kibana 中的。可以通過 kibana-plugin 去安裝 Canvas 插件,不過我後來還是選擇使用 6.5.4 版本,同時注意相應 elasticsearch 也需要更新到 6.5.4 版本。最後在使用反彈指令的時候,遇到了一點問題,可能與機器系統版本相關,可以多嘗試幾種指令。
漏洞的利用過程其實不是特别複雜,注意幾點即可:
- 漏洞的影響的版本是 5.6.15 版本以及 6.6.1 版本以前。
- Kibana 需要安裝了 Canvas 插件。
- 目前公開的 POC 因為使用了 linux 特有的環境變量,是以目前這個 POC 隻能作用于 linux 機器。

原型鍊攻擊
如果熟悉 JavaScript 的同學,對于原型鍊應該會比較熟悉。傳統的 JavaScript 對象的內建就是基于原型鍊實作的。如果可以利用程式漏洞可以去修改 Object.protootype 就會導緻所有的 JavaScript 的變量收到影響。針對本次漏洞,修複方式就是通過 hasOwnProperty 方法可以確定直接通過
proto屬性直接去修改 prototype。
原型鍊攻擊現在一般雖然不能直接用于攻擊,但是一般配合系統功能可以達到一些運作惡意指令的效果。如果一個程式有原型鍊漏洞,并且這個程式會建立新的程序,那麼這個程式就極有可能有遠端指令執行漏洞。
漏洞防範
- 及時更新 Kibana 版本。
- Kibana 增加使用者授權通路。
Reference
- https://slides.com/securitymb/prototype-pollution-in-kibana/