天天看點

kibana使用_Kibana 任意代碼執行漏洞

這幾天,有人公開了 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 機器。
kibana使用_Kibana 任意代碼執行漏洞

原型鍊攻擊

如果熟悉 JavaScript 的同學,對于原型鍊應該會比較熟悉。傳統的 JavaScript 對象的內建就是基于原型鍊實作的。如果可以利用程式漏洞可以去修改 Object.protootype 就會導緻所有的 JavaScript 的變量收到影響。針對本次漏洞,修複方式就是通過 hasOwnProperty 方法可以確定直接通過

proto

屬性直接去修改 prototype。

kibana使用_Kibana 任意代碼執行漏洞

原型鍊攻擊現在一般雖然不能直接用于攻擊,但是一般配合系統功能可以達到一些運作惡意指令的效果。如果一個程式有原型鍊漏洞,并且這個程式會建立新的程序,那麼這個程式就極有可能有遠端指令執行漏洞。

漏洞防範

  1. 及時更新 Kibana 版本。
  2. Kibana 增加使用者授權通路。

Reference

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