XXL-JOB AccessToken身份绕过原理深度剖析
字数 1806 2025-08-29 22:41:01
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
{
"jobId": 1,
"executorHandler": "script",
"executorParams": "",
"executorBlockStrategy": "COVER_EARLY",
"glueType": "GLUE_POWERSHELL",
"glueSource": "恶意PowerShell命令",
"glueUpdatetime": 1586629003726,
"logId": 1,
"logDateTime": 1586629003726,
"broadcastIndex": 0,
"broadcastTotal": 1
}
修复建议
-
修改默认配置:
- 修改调度中心和执行器配置项
xxl.job.accessToken的默认值 - 确保调度中心和执行器使用相同的accessToken值
- 修改调度中心和执行器配置项
-
安全实践:
- 禁止将accessToken硬编码在配置文件中
- 考虑使用动态生成的accessToken
- 定期更换accessToken
-
版本升级:
- 升级到最新版本,官方已修复此问题
-
网络防护:
- 限制执行器API接口的访问权限
- 使用网络ACL限制可访问IP
总结
XXL-JOB AccessToken身份绕过漏洞源于默认配置不当和身份验证机制缺陷,攻击者可以利用此漏洞在目标系统上执行任意命令。通过深入分析代码执行流程,我们可以更好地理解漏洞原理并采取有效的防护措施。建议所有使用XXL-JOB的用户及时检查配置并升级到安全版本。