xxl-job_2.4.1ssrf导致Rce漏洞代码分析(CVE-2024-24113)
字数 1659 2025-08-29 08:29:58

XXL-JOB 2.4.1 SSRF导致RCE漏洞分析(CVE-2024-24113) 教学文档

漏洞概述

本漏洞是一个组合漏洞,通过SSRF(服务器端请求伪造)获取accessToken后,利用accessToken进行远程代码执行(RCE)。漏洞存在于XXL-JOB 2.4.1版本中。

漏洞原理

  1. SSRF部分:攻击者可以通过构造特定的addressList参数,使XXL-JOB调度中心向攻击者控制的服务器发送请求,泄露敏感信息如accessToken
  2. RCE部分:获取accessToken后,攻击者可伪造调度中心身份,向执行器发送恶意请求,执行任意命令。

漏洞详细分析

1. accessToken的作用

accessToken是XXL-JOB用于校验调度中心(Admin)与执行器(Executor)之间通信合法性的凭证。拥有有效的accessToken可以伪装成合法的调度中心。

2. RCE部分分析

命令执行路径

  1. 路由入口/run路由
  2. 核心类com.xxl.job.core.biz.impl.ExecutorBizImpl
  3. 执行方法run方法

命令执行流程

  1. 首先校验accessToken是否正确
  2. 判断路由为/run后进入执行逻辑
  3. 最终在com.xxl.job.core.handler.impl.ScriptJobHandler类中执行命令

命令执行核心逻辑

  1. 检查glueType是否为脚本类型
  2. 获取脚本执行命令和构建文件名
  3. 检查指定路径下的脚本文件是否存在,不存在则创建
  4. 执行脚本文件

3. SSRF部分分析

触发路径

  1. 触发路由/xxl-job-admin/jobinfo/trigger
  2. 核心类com.xxl.job.admin.controller.JobInfoController

关键参数

addressList参数是造成SSRF的关键,攻击者可以控制此参数指向任意地址。

SSRF流程

  1. 请求进入JobInfoController.trigger()方法
  2. 调用链:
    • com.xxl.job.admin.service.impl.XxlJobServiceImpl.trigger()
    • com.xxl.job.admin.core.thread.JobTriggerPoolHelper.trigger()
    • com.xxl.job.admin.core.trigger.XxlJobTrigger.processTrigger()
  3. XxlJobTrigger中,攻击者提供的addressList覆盖了原始值
  4. 最终通过runExecutor方法向指定地址发送HTTP请求

漏洞利用点

  1. 整个流程中没有对addressList参数进行有效校验
  2. 响应中包含敏感信息如accessToken

漏洞复现

利用步骤

  1. 构造恶意addressList参数指向攻击者控制的服务器
  2. 发送请求到/xxl-job-admin/jobinfo/trigger触发SSRF
  3. 从响应中获取accessToken
  4. 使用获取的accessToken伪造调度中心身份
  5. 向执行器发送恶意请求执行任意命令

EXP示例

(根据原文描述,EXP应包含以下关键部分)

  1. SSRF部分构造恶意addressList
  2. 从响应中提取accessToken
  3. 使用accessToken构造RCE请求

修复建议

  1. addressList参数进行严格校验,限制只能访问合法的执行器地址
  2. 加强accessToken的保护,避免泄露
  3. 更新到最新安全版本

参考链接

  1. XXL-JOB之前版本RCE漏洞分析
  2. 官方安全公告

总结

本漏洞通过SSRF获取敏感凭证accessToken,再利用accessToken进行远程命令执行,是一个典型的组合漏洞。理解此漏洞需要对XXL-JOB的调度中心与执行器交互机制有清晰认识。

XXL-JOB 2.4.1 SSRF导致RCE漏洞分析(CVE-2024-24113) 教学文档 漏洞概述 本漏洞是一个组合漏洞,通过SSRF(服务器端请求伪造)获取accessToken后,利用accessToken进行远程代码执行(RCE)。漏洞存在于XXL-JOB 2.4.1版本中。 漏洞原理 SSRF部分 :攻击者可以通过构造特定的 addressList 参数,使XXL-JOB调度中心向攻击者控制的服务器发送请求,泄露敏感信息如 accessToken 。 RCE部分 :获取 accessToken 后,攻击者可伪造调度中心身份,向执行器发送恶意请求,执行任意命令。 漏洞详细分析 1. accessToken的作用 accessToken 是XXL-JOB用于校验调度中心(Admin)与执行器(Executor)之间通信合法性的凭证。拥有有效的 accessToken 可以伪装成合法的调度中心。 2. RCE部分分析 命令执行路径 路由入口 : /run 路由 核心类 : com.xxl.job.core.biz.impl.ExecutorBizImpl 执行方法 : run 方法 命令执行流程 首先校验 accessToken 是否正确 判断路由为 /run 后进入执行逻辑 最终在 com.xxl.job.core.handler.impl.ScriptJobHandler 类中执行命令 命令执行核心逻辑 检查 glueType 是否为脚本类型 获取脚本执行命令和构建文件名 检查指定路径下的脚本文件是否存在,不存在则创建 执行脚本文件 3. SSRF部分分析 触发路径 触发路由 : /xxl-job-admin/jobinfo/trigger 核心类 : com.xxl.job.admin.controller.JobInfoController 关键参数 addressList 参数是造成SSRF的关键,攻击者可以控制此参数指向任意地址。 SSRF流程 请求进入 JobInfoController.trigger() 方法 调用链: com.xxl.job.admin.service.impl.XxlJobServiceImpl.trigger() com.xxl.job.admin.core.thread.JobTriggerPoolHelper.trigger() com.xxl.job.admin.core.trigger.XxlJobTrigger.processTrigger() 在 XxlJobTrigger 中,攻击者提供的 addressList 覆盖了原始值 最终通过 runExecutor 方法向指定地址发送HTTP请求 漏洞利用点 整个流程中没有对 addressList 参数进行有效校验 响应中包含敏感信息如 accessToken 漏洞复现 利用步骤 构造恶意 addressList 参数指向攻击者控制的服务器 发送请求到 /xxl-job-admin/jobinfo/trigger 触发SSRF 从响应中获取 accessToken 使用获取的 accessToken 伪造调度中心身份 向执行器发送恶意请求执行任意命令 EXP示例 (根据原文描述,EXP应包含以下关键部分) SSRF部分构造恶意 addressList 从响应中提取 accessToken 使用 accessToken 构造RCE请求 修复建议 对 addressList 参数进行严格校验,限制只能访问合法的执行器地址 加强 accessToken 的保护,避免泄露 更新到最新安全版本 参考链接 XXL-JOB之前版本RCE漏洞分析 官方安全公告 总结 本漏洞通过SSRF获取敏感凭证 accessToken ,再利用 accessToken 进行远程命令执行,是一个典型的组合漏洞。理解此漏洞需要对XXL-JOB的调度中心与执行器交互机制有清晰认识。