前几日,运调中心的运维同事暴露出来一些已知BUG,其中一项是关于XXL-JOB调度工具的一些BUG。今天就关于AccessToken权限绕过漏洞做一些处理。XXL-JOB 是一款开源的分布式任务调度平台,用于实现大规模任务的调度和执行。XXL-JOB 在使用时使用了默认的AccessToken ,攻击者可使用 AccessToken 绕过认证权限,调用 executor,执行任意代码,从而获取服务器权限或者一些不可逆的操作。
【搜索引擎】
当我们拿到一些已知BUG,最简单快捷的方式就是通过搜索引擎来获取答案,然后使用正确的方式来处理,验证无误后,上报处理结果。
例如通过搜索引擎搜索答案:
【开源社区】
或者去开源社区获取一些开发者处理的BUG。例如我们可以去XXL-JOB的Github的社区来寻求答案。
在Github中一些相关的ISSUE如下:
为了确认当前项目引入的版本是否在当前漏洞版本内,打开项目,在 pom.xml
中找到代码引入的位置。通过查看,正好在漏洞范围内,急需处理。
漏洞版本:2.2.0 ~ 2.4.0
项目引入版本:2.2.0
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
从代码设定来看,如果漏洞利用者使用到这些XXL-JOB为了灵活支持多语言以及脚本任务,可以进行无差别使用。从代码支撑的语言可以看出来,支持Java、Shell、Python、NodeJS、PHP、PowerShell……等(动态生效:用户在线通过Web IDE开发的任务代码,远程推送至执行器,实时加载执行)类型。任务以源码方式维护在调度中心,支持通过Web IDE在线开发、维护。默认情况下,我们使用的都是BEAN,如果漏洞利用者使用SHELL或者其他方式,可想而知,后果很严重。
BEAN("BEAN", false, null, null),
GLUE_GROOVY("GLUE(Java)", false, null, null),
GLUE_SHELL("GLUE(Shell)", true, "bash", ".sh"),
GLUE_PYTHON("GLUE(Python)", true, "python", ".py"),
GLUE_PHP("GLUE(PHP)", true, "php", ".php"),
GLUE_NODEJS("GLUE(Nodejs)", true, "node", ".js"),
GLUE_POWERSHELL("GLUE(PowerShell)", true, "powershell", ".ps1");
知道漏洞出现的原因以及出现的位置,那么处理起来就比较顺心应手,直接找到application.yaml
(或 application.yml
或 application.properties
)文件,然后依次找到相应的的代码处。我这里使用 application.yaml
,直接找到位置修改。
# XXL-JOB配置
xxl:
job:
login:
username: xxxxxxxxxx
password: xxxxxxxxxx
# 需要修改的位置就在这里,根据上面漏洞的原因,
# 这里使用了默认值,修改了一个非默认值即可。
# 默认不填写值,在取值时默认为空或者default
accessToken:
i18n: zh_CN
# 触发池
triggerpool:
fast:
max: 1000
slow:
max: 1000
logretentiondays: 30
当修改完成后,即可测试是否可以绕过权限调用其他可利用的接口。为了测试接口,可以选择默认的demo,也可以自己写一个接口。为了方便测试,此时我们可以采取使用Postman来请求测试数据。
{
"jobId": 1,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "SERIAL_EXECUTION",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 17147401371000,
"glueType": "GLUE_POWERSHELL",
"glueSource": "whoami",
"glueUpdatetime": 17147401371000,
"broadcastIndex": 0,
"broadcastTotal": 0
}
未设置AccessToken参数时(使用默认值),请求结果如下(为了方便演示,端口已经设置其他端口):
设置AccessToken参数,不使用默认值时,请求结果如下:
注意⚠️
在本篇以前,官方已修复该漏洞,且建议用户修改调度中心和执行器配置项 accessToken 的默认值,防止漏洞利用者利用这个漏洞。所以只需要按照要求修改即可避免漏洞被利用的情况出现。
如果是在JeecgBoot低代码框架中,由于已经重写了xxl-job的部分参数设定,所以需要在配置文件中使用如下代码配置。使用上述默认的处理方式不生效,大家可以进入代码调试。
jeecg:
xxljob:
access-token: xxxxxxxxxxxx
如果是使用Ruoyi代码框架,那么可以在配置文件中使用默认的配置方式,如下所示:
### xxl-job, access token
xxl.job.accessToken=xxxxxxxxxx
XXL-JOB 在使用时使用了默认的AccessToken ,攻击者可使用 AccessToken 绕过认证权限,调用 executor,执行任意代码,从而获取服务器权限或者一些不可逆的操作。社区已经在漏洞发布出来前已经提前处理并提供了处理结果,大家可以酌情依据处理。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有