XXL-JOB是一個輕量級分散式任務排程平台,其核心設計目標是開發快速、學習簡單、輕量級、易擴展。現已開放原始碼並接入多家公司線上產品線,開箱即用。
這次漏洞核心問題是 GLUE 模式。 XXL-JOB 透過「GLUE模式」支援多語言以及腳本任務,此模式任務特點如下:
● 多語言支援:支援Java、Shell、Python、NodeJS、PHP、PowerShell…等類型。
● Web IDE:任務以原始碼方式維護在調度中心,支援透過 Web IDE 線上開發、維護。
● 動態生效:使用者在線上透過 Web IDE 開發的任務程式碼,遠端推送至執行器,即時載入執行。
如上圖所示,如果在 GLUE 模式任務程式碼中寫入攻擊程式碼,推送到執行器執行即可造成遠端攻擊。
【漏洞描述】
XXL-JOB的Restful API介面或RPC介面沒有設定認證措施,未經授權的攻擊者可建構惡意請求,造成遠端執行指令
【漏洞評等】
高危險群
#【受影響版本】
XXL-JOB <= 2.2.0
整體想法:原始碼下載->Maven安裝依賴->設定部署「調度中心」- >設定部署「執行器專案」->完成部署
本機開發環境:Java8 Maven3.6
1. Github下載原始碼
位址:https: //github.com/xuxueli/xxl-job/releases/tag/v2.2.0
2. Maven下載所需的依賴
Idea開啟解壓縮後的原始程式碼,自動會進行pom中的相關依賴安裝,也可以在終端機使用maven指令下載所需的依賴
3.資料庫設定
調度資料庫初始化SQL腳本位置為:
/xxl-job/doc/db/tables_xxl_job.sql
因為本機未安裝mysql,故使用docker安裝。
a) docker pull mysql:5.7
b) sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
###########################################################################################'我們就啟動了mysql容器,帳號為root,密碼為123456######使用navicat接連資料庫#########可以點選左下角,完成測試連線。在匯入的資料庫右鍵,選擇執行SQL文件,點選開始即可完成資料庫的匯入。 ##################4. 設定部署「調度中心」#########調度中心專案:xxl-job-admin#######作用:統一管理任務調度平台上調度任務,負責觸發調度執行,並提供任務管理平台。可依實際情況自行修改application.properties中的資料庫設定################執行XxlJobAdminApplication啟動排程中心#########我們使用建議的Springboot來管理執行器#########查看配置文件,發現xxl.job.executor.logpath參數,我們可以新建或修改該路徑,以防止程式執行出現問題。 Mac新系統不存在data路徑,發現使用mkdir建立路徑發現失敗,這是因為mac系統中關閉了Sip,使用sudo mount -uw /來解除Sip的限制。執行XxlJobExecutorApplication來啟動執行器。瀏覽器開啟//localhost:8080/,看到登入介面,確保啟動成功,預設登入帳號「admin/123456」##############注意點:##### #建議先建立/data/applogs/xxl-job,程式中多處設定檔使用該路徑######修改調度中心資料庫設定######Linux/Unix可使用lsof來檢視連接埠佔用情況,防止啟動失敗###
調度中心和執行器可以根據實際情況分開部署
查看官方文件可以看到執行器RESTful API中觸發任務介面說明
其中的任務運行模式有以下幾種
查看GulueTypeEnum原始碼
所以我們利用Burpsuite來建構我們的POC
Tips:
修改glueSource時,如果執行未生效,請修改jobId
當重新啟動專案時,發現連接埠啟動異常,請關閉BurpSuite
由於XXL-JOB 官方版本原生自帶鑑權元件,開啟後可保障系統底層通訊安全。 XXL-JOB 作者表示正常情況下調度中心與執行器底層通訊是安全的,不存在遠端命令漏洞。但如果執行器未開啟存取令牌,會導致無法辨識並攔截非法的調度請求。惡意請求方可以藉助 GLUE 模式,推送惡意攻擊程式碼實現遠端攻擊。因此,XXL-JOB 作者認為該問題本質上不屬於 “漏洞”,官網版本提供了鑑權組件,開啟即可進行防護。
1. 開啟XXL-JOB 自帶的鑑權元件:官方文件中搜尋“xxl.job.accessToken”,依照文件說明啟用即可。
2. 連接埠存取限制:透過設定安全群組限制只允許指定IP才能存取連接埠
以上是如何進行XXL-JOB API介面未授權存取RCE漏洞復現的詳細內容。更多資訊請關注PHP中文網其他相關文章!