kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
原標題:Apache Kylin 命令注入漏洞調試分析(CVE-2020-1956)
1、前言
Apache Kylin是一個開源的、分布式的分析型數據倉庫,提供Hadoop/Spark 之上的 SQL 查詢接口及多維分析(OLAP)能力以支持超大規模數據。近日,百度云安全團隊監測到Apache官方發出了一個漏洞通告,披露了Apache kylin多版本存在命令注入漏洞,漏洞編號為CVE-2020-1956。由于Apache Kylin依賴的組件較多,自行搭建環境較為困難,我們采用了IDEA+docker進行遠程調試來分析漏洞。
2、遠程調試環境搭建
本次復現使用了受影響的Kylin 3.0.1版本,直接鏡像拉取并啟動,對外暴露17070、19001端口。
docker pull apachekylin/apache-kylin-standalone:3.0.1
docker run -d -p 17070:7070 19001:19001 apachekylin/apache-kylin-standalone:3.0.1
遠程調試需要保證運行環境代碼和本地代碼相同,這里我們可以去Kylin的releases頁面下載3.0.1版本,解壓后導入IDEA。此時docker啟動的Kylin并沒有開啟遠程調試,先進入容器bash,修改/home/admin/apache-kylin-3.0.1-bin-hbase1x/bin/kylin.sh,在啟動命令添加一行。
此時Kylin是啟動狀態,先執行./kylin.sh stop以停止服務,再執行啟動腳本/home/admin/entrypoint.sh,可連接到服務器的19001端口進行遠程調試。編輯Configurations,選擇Remote并填寫對應的主機和端口。
當Console端出現如下提示,表明遠程連接成功。
3、漏洞分析
漏洞入口在server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java的migrateCube方法,我們構造好對應的POST包,對該方法打斷點。此時傳遞的project為learn_kylin,隨后進入migrateCute方法。
跟進到CubeService.java的migrateCute方法,1086行會獲取kylin的配置,1087行調用config對象的isAllowAutoMigrateCube進行判斷,若返回False則程序會拋出異常。
我們跟進到KylinConfigBase.java的isAllowAutoMigrateCube方法,該方法主要是判斷屬性kylin.tool.auto-migrate-cube.enabled的值是否為true,若要繼續執行則需要設置該屬性為true。
接著在1098、1099行會從config對象中獲取srcCfgUri、dstCfgUri,對象的屬性分別為
kylin.tool.auto-migrate-cube.src-config、kylin.tool.auto-migrate-cube.dest-config,并且1101、1102行還會判斷取出的兩個屬性的值是否為空。
接著1108行會將projectName、srcCfgUri、dstCfgUri等參數直接拼接到cmd中,并在1111行執行,在整個過程中沒有對projectName進行任何的校驗,導致命令注入漏洞。并且,若能夠控制上述3個屬性值,那么srcCfgUri以及dstCfgUri也是能夠導致命令注入漏洞的。
我們看下官方的補丁https://github.com/apache/kylin/commit/9cc3793ab2f2f 0053c467a9 b3f38cb7791cd436a。對projectName、dstCfgUri、srcCfgUri都調用了checkParameter方法進行處理。
而checkParameter方法主要是將可疑的命令執行字符替換為空,包括空格、管道符、&等。
4、漏洞復現
根據網上文檔可知,Cube級屬性值是可以添加或者修改的,并且可以覆蓋kylin的屬性。那么我們首先在某個Cube中添加上述屬性。
這里我們先嘗試ProjectName參數的命令注入,發現可以成功執行touch命令。
由于命令注入點在路徑中,注入命令中包含”/”會導致路由出錯,而反彈shell、寫webshell等都需要用”/”,因此有一些文章將此處認定為受限的命令注入。但是這里我們可以用其他字符來替代斜杠,聯系上篇文章提到的shell參數擴展,斜杠可以用${PATH:0:1}表示。
同樣的,由于可以直接修改配置文件,也可以利用srcCfgUri或者dstCfgUri注入,此時就不受路徑處的一些限制了。
5、安全產品解決方案
百度安全智能一體化產品已支持CVE-2020-1956漏洞的檢測和攔截,有需要的用戶可以訪問anquan.baidu.com聯系我們。
參考鏈接:
https://www.t00ls.net/thread-56549-1-1.html
https://github.com/apache/kylin/commit/9cc3793ab2f2f0053c467a9b3f38cb7791cd436a返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mooc北京大学python_实用Pyt
- 下一篇: bq4050读固件_stm32f767