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
調度中心和執行器可以根據實際情況分開部署
查看官方文件可以看到執行器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中文網其他相關文章!