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 版本。最後在使用反彈命令的時候,遇到了一點問題,可能與機器系統版本相關,可以多嘗試幾種命令。

漏洞的利用過程其實不是特別複雜,注意幾點即可:

  1. 漏洞的影響的版本是 5.6.15 版本以及 6.6.1 版本以前。
  2. Kibana 需要安裝了 Canvas 插件。
  3. 目前公開的 POC 因為使用了 linux 特有的環境變量,所以目前這個 POC 只能作用於 linux 機器。

原型鏈攻擊

如果熟悉 JavaScript 的同學,對於原型鏈應該會比較熟悉。傳統的 JavaScript 對象的集成就是基於原型鏈實現的。如果可以利用程序漏洞可以去修改 Object.protootype 就會導致所有的 JavaScript 的變量收到影響。針對本次漏洞,修復方式就是通過 hasOwnProperty 方法可以確保直接通過 proto 屬性直接去修改 prototype。

原型鏈攻擊現在一般雖然不能直接用於攻擊,但是一般配合系統功能可以達到一些運行惡意命令的效果。如果一個程序有原型鏈漏洞,並且這個程序會創建新的進程,那麼這個程序就極有可能有遠程命令執行漏洞。

漏洞防範

  1. 及時升級 Kibana 版本。
  2. Kibana 增加用戶授權訪問。

Reference

  • https://slides.com/securitymb/prototype-pollution-in-kibana/