Kibana 任意代碼執行漏洞
- 2019 年 11 月 28 日
- 筆記
這幾天,有人公開了 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/