XXL-JOB AccessToken身份绕过原理深度剖析
字数 1806 2025-08-29 22:41:01

XXL-JOB AccessToken身份绕过漏洞深度分析与利用指南

漏洞概述

XXL-JOB是一个分布式任务调度平台,在2.3.1~2.4版本中存在AccessToken身份绕过漏洞,导致攻击者可以绕过身份认证调用executor执行任意代码,获取服务器权限。

漏洞原理

  1. AccessToken机制:用于调度中心和执行器之间进行安全性校验,双方AccessToken匹配才允许通讯
  2. 默认配置问题:默认配置下用于调度通讯的accessToken不是随机生成的,而是使用application.properties配置文件中的默认值
  3. 身份绕过:攻击者可以利用默认的accessToken配置绕过身份认证

环境搭建

准备工作

  1. 下载源码:https://github.com/xuxueli/xxl-job/releases/tag/2.4.0
  2. 使用IDEA导入项目
  3. 创建数据库:
    • 创建xxl_job数据库
    • 执行doc/db/tables_xxl_job.sql脚本

启动服务

  1. 调度中心:

    • 启动后默认端口8080
    • 访问地址:http://localhost:8080/xxl-job-admin
  2. 执行器:

    • 默认端口9999
    • 需要单独部署

漏洞分析

关键组件

  1. 调度中心

    • 统一管理任务调度平台
    • 负责触发调度执行
    • 提供任务管理平台
  2. 执行器

    • 接收调度中心的调度并执行
    • 提供RESTful API接口

关键API接口

执行器提供以下RESTful API:

  • 心跳检测
  • 忙碌检测
  • 触发任务
  • 终止任务
  • 查看执行日志

漏洞触发点/run接口(触发任务)

代码分析流程

  1. 请求处理流程:

    • 校验请求方法是否为POST
    • 检查URL地址是否为空
    • 校验accessToken是否为空
    • 根据uri进行请求匹配分发
  2. /run接口处理:

    • 将Json数据转换为TriggerParam对象
    • 调用executorBiz.run(triggerParam)执行计划任务
  3. 任务执行流程:

    • 加载和初始化线程任务(jobThread)和jobHandler
    • 校验任务处理器
    • 处理任务阻塞策略
    • 注册任务并添加到队列中
  4. 脚本类型处理:

    • 根据系统类型选择执行方式(Windows-PowerShell,Linux-bin)
    • 创建ScriptJobHandler
    • 创建并启动线程执行任务
  5. 命令执行点:

    • ScriptJobHandler.execute()方法
    • 获取系统命令行
    • 将脚本写入文件
    • 调用ScriptUtil.execToFile执行脚本文件

漏洞利用

利用条件

  1. 目标系统使用XXL-JOB 2.3.1~2.4版本
  2. 使用默认accessToken配置或已知accessToken

利用步骤

  1. 构造恶意请求:

    • 请求方法:POST
    • 路径:/run
    • Headers:添加正确的accessToken
    • Body:包含执行参数
  2. 关键参数说明:

    • executorHandler:任务处理器(如"script")
    • glueType:脚本类型(如"GLUE_POWERSHELL")
    • glueSource:要执行的脚本内容
    • executorBlockStrategy:任务阻塞策略
  3. 任务阻塞策略选项:

    • SERIAL_EXECUTION(串行)
    • DISCARD_LATER(丢弃后续)
    • COVER_EARLY(覆盖之前)
  4. 系统适配:

    • Windows:使用PowerShell脚本
    • Linux:使用bash脚本

示例Payload

{
  "jobId": 1,
  "executorHandler": "script",
  "executorParams": "",
  "executorBlockStrategy": "COVER_EARLY",
  "glueType": "GLUE_POWERSHELL",
  "glueSource": "恶意PowerShell命令",
  "glueUpdatetime": 1586629003726,
  "logId": 1,
  "logDateTime": 1586629003726,
  "broadcastIndex": 0,
  "broadcastTotal": 1
}

修复建议

  1. 修改默认配置

    • 修改调度中心和执行器配置项xxl.job.accessToken的默认值
    • 确保调度中心和执行器使用相同的accessToken值
  2. 安全实践

    • 禁止将accessToken硬编码在配置文件中
    • 考虑使用动态生成的accessToken
    • 定期更换accessToken
  3. 版本升级

    • 升级到最新版本,官方已修复此问题
  4. 网络防护

    • 限制执行器API接口的访问权限
    • 使用网络ACL限制可访问IP

总结

XXL-JOB AccessToken身份绕过漏洞源于默认配置不当和身份验证机制缺陷,攻击者可以利用此漏洞在目标系统上执行任意命令。通过深入分析代码执行流程,我们可以更好地理解漏洞原理并采取有效的防护措施。建议所有使用XXL-JOB的用户及时检查配置并升级到安全版本。

XXL-JOB AccessToken身份绕过漏洞深度分析与利用指南 漏洞概述 XXL-JOB是一个分布式任务调度平台,在2.3.1~2.4版本中存在AccessToken身份绕过漏洞,导致攻击者可以绕过身份认证调用executor执行任意代码,获取服务器权限。 漏洞原理 AccessToken机制 :用于调度中心和执行器之间进行安全性校验,双方AccessToken匹配才允许通讯 默认配置问题 :默认配置下用于调度通讯的accessToken不是随机生成的,而是使用application.properties配置文件中的默认值 身份绕过 :攻击者可以利用默认的accessToken配置绕过身份认证 环境搭建 准备工作 下载源码:https://github.com/xuxueli/xxl-job/releases/tag/2.4.0 使用IDEA导入项目 创建数据库: 创建xxl_ job数据库 执行doc/db/tables_ xxl_ job.sql脚本 启动服务 调度中心: 启动后默认端口8080 访问地址:http://localhost:8080/xxl-job-admin 执行器: 默认端口9999 需要单独部署 漏洞分析 关键组件 调度中心 : 统一管理任务调度平台 负责触发调度执行 提供任务管理平台 执行器 : 接收调度中心的调度并执行 提供RESTful API接口 关键API接口 执行器提供以下RESTful API: 心跳检测 忙碌检测 触发任务 终止任务 查看执行日志 漏洞触发点 : /run 接口(触发任务) 代码分析流程 请求处理流程: 校验请求方法是否为POST 检查URL地址是否为空 校验accessToken是否为空 根据uri进行请求匹配分发 /run 接口处理: 将Json数据转换为TriggerParam对象 调用 executorBiz.run(triggerParam) 执行计划任务 任务执行流程: 加载和初始化线程任务(jobThread)和jobHandler 校验任务处理器 处理任务阻塞策略 注册任务并添加到队列中 脚本类型处理: 根据系统类型选择执行方式(Windows-PowerShell,Linux-bin) 创建ScriptJobHandler 创建并启动线程执行任务 命令执行点: ScriptJobHandler.execute() 方法 获取系统命令行 将脚本写入文件 调用 ScriptUtil.execToFile 执行脚本文件 漏洞利用 利用条件 目标系统使用XXL-JOB 2.3.1~2.4版本 使用默认accessToken配置或已知accessToken 利用步骤 构造恶意请求: 请求方法:POST 路径:/run Headers:添加正确的accessToken Body:包含执行参数 关键参数说明: executorHandler :任务处理器(如"script") glueType :脚本类型(如"GLUE_ POWERSHELL") glueSource :要执行的脚本内容 executorBlockStrategy :任务阻塞策略 任务阻塞策略选项: SERIAL_ EXECUTION(串行) DISCARD_ LATER(丢弃后续) COVER_ EARLY(覆盖之前) 系统适配: Windows:使用PowerShell脚本 Linux:使用bash脚本 示例Payload 修复建议 修改默认配置 : 修改调度中心和执行器配置项 xxl.job.accessToken 的默认值 确保调度中心和执行器使用相同的accessToken值 安全实践 : 禁止将accessToken硬编码在配置文件中 考虑使用动态生成的accessToken 定期更换accessToken 版本升级 : 升级到最新版本,官方已修复此问题 网络防护 : 限制执行器API接口的访问权限 使用网络ACL限制可访问IP 总结 XXL-JOB AccessToken身份绕过漏洞源于默认配置不当和身份验证机制缺陷,攻击者可以利用此漏洞在目标系统上执行任意命令。通过深入分析代码执行流程,我们可以更好地理解漏洞原理并采取有效的防护措施。建议所有使用XXL-JOB的用户及时检查配置并升级到安全版本。