xxl-job IDOR 0Day 漏洞挖掘
字数 1664 2025-09-01 11:25:54

XXL-JOB IDOR 0Day漏洞分析与挖掘技术文档

1. 漏洞概述

本文档详细分析了XXL-JOB分布式任务调度平台中存在的IDOR(不安全的直接对象引用)漏洞,包括漏洞原理、发现过程、验证方法及修复建议。

2. 目标系统简介

XXL-JOB是一个开源的分布式任务调度平台,具有以下特点:

  • GitHub项目地址:https://github.com/xuxueli/xxl-job
  • 版本:3.1.1
  • Star数量:29.1k
  • 技术栈:基于Java17构建,使用SpringMVC框架
  • 广泛应用:美团、大众点评等互联网企业均有接入

3. 鉴权机制分析

3.1 核心拦截器分析

鉴权逻辑位于com.xxl.job.admin.controller.interceptor类中,该类实现了WebMvcConfigurer接口,注册了两个关键拦截器:

  1. PermissionInterceptor:权限控制核心拦截器

    • 重写了preHandle方法,对每个Controller请求进行拦截
    • 默认权限规则:
      • 如果路由没有使用@PermissionLimit注解,则默认允许已登录的非管理员用户访问
      • 使用@PermissionLimit可以自定义权限要求
  2. 方法级权限控制

    • 通过filterJobGroupByRole方法进行细粒度权限控制
    • 示例:检查当前用户是否有权限访问特定日志分组

3.2 权限控制缺陷

漏洞挖掘的关键目标是寻找:

  1. 没有使用@PermissionLimit注解的路由
  2. 方法内部没有调用PermissionInterceptor.validJobGroupPermission进行权限验证的接口

4. 漏洞详情

4.1 未授权任务日志访问漏洞

漏洞路由/xxl-job-admin/joblog/getJobsByGroup

漏洞特征

  • @PermissionLimit注解
  • 方法内部无权限验证
  • 允许普通用户枚举系统任务日志

验证步骤

  1. 使用普通用户凭证登录系统
  2. 正常情况下不应有访问joblog的权限
  3. 构造请求直接访问该接口
  4. 成功获取系统任务日志信息

4.2 未授权任务删除漏洞

漏洞路由/xxl-job-admin/jobinfo/remove

漏洞特征

  • @PermissionLimit注解
  • 方法内部无权限验证
  • 允许普通用户删除系统任务

验证步骤

  1. 使用普通用户凭证登录系统
  2. 正常情况下不应有访问jobinfo的权限
  3. 构造删除请求
  4. 验证数据库确认任务已被删除

5. 漏洞挖掘方法论

5.1 Spring Web项目审计要点

  1. 安全配置审查

    • 检查全局拦截器配置
    • 分析权限控制机制
    • 识别默认权限规则
  2. 权限控制检查

    • 水平越权:相同权限用户间的越权
    • 垂直越权:不同权限等级用户间的越权
  3. 路由审计方法

    • 查找未受保护的路由(无权限注解)
    • 检查方法内部是否缺少权限验证
    • 可使用CodeQL等静态分析工具辅助审计

5.2 漏洞挖掘流程

  1. 分析系统权限架构
  2. 识别默认权限规则
  3. 枚举所有路由接口
  4. 筛选无保护的路由
  5. 验证潜在漏洞

6. 修复建议

  1. 立即修复措施

    • 对所有敏感路由添加@PermissionLimit注解
    • 在方法内部添加细粒度权限验证
  2. 长期安全加固

    • 实施最小权限原则
    • 建立默认拒绝的权限模型
    • 定期进行安全审计
  3. 参考修复方案

    • GitHub Issues讨论:
      • https://github.com/xuxueli/xxl-job/issues/3772
      • https://github.com/xuxueli/xxl-job/issues/3773

7. 漏洞披露

本漏洞已提交至VulDB,正在等待CVE编号分配。

8. 总结

XXL-JOB作为广泛使用的分布式任务调度系统,其权限控制机制存在设计缺陷,导致多个IDOR漏洞。通过分析系统鉴权架构,可以系统性地发现此类安全问题。建议开发者重视权限控制设计,避免类似漏洞的发生。

XXL-JOB IDOR 0Day漏洞分析与挖掘技术文档 1. 漏洞概述 本文档详细分析了XXL-JOB分布式任务调度平台中存在的IDOR(不安全的直接对象引用)漏洞,包括漏洞原理、发现过程、验证方法及修复建议。 2. 目标系统简介 XXL-JOB是一个开源的分布式任务调度平台,具有以下特点: GitHub项目地址:https://github.com/xuxueli/xxl-job 版本:3.1.1 Star数量:29.1k 技术栈:基于Java17构建,使用SpringMVC框架 广泛应用:美团、大众点评等互联网企业均有接入 3. 鉴权机制分析 3.1 核心拦截器分析 鉴权逻辑位于 com.xxl.job.admin.controller.interceptor 类中,该类实现了 WebMvcConfigurer 接口,注册了两个关键拦截器: PermissionInterceptor :权限控制核心拦截器 重写了 preHandle 方法,对每个Controller请求进行拦截 默认权限规则: 如果路由没有使用 @PermissionLimit 注解,则默认允许 已登录的非管理员用户 访问 使用 @PermissionLimit 可以自定义权限要求 方法级权限控制 : 通过 filterJobGroupByRole 方法进行细粒度权限控制 示例:检查当前用户是否有权限访问特定日志分组 3.2 权限控制缺陷 漏洞挖掘的关键目标是寻找: 没有使用 @PermissionLimit 注解的路由 方法内部没有调用 PermissionInterceptor.validJobGroupPermission 进行权限验证的接口 4. 漏洞详情 4.1 未授权任务日志访问漏洞 漏洞路由 : /xxl-job-admin/joblog/getJobsByGroup 漏洞特征 : 无 @PermissionLimit 注解 方法内部无权限验证 允许普通用户枚举系统任务日志 验证步骤 : 使用普通用户凭证登录系统 正常情况下不应有访问joblog的权限 构造请求直接访问该接口 成功获取系统任务日志信息 4.2 未授权任务删除漏洞 漏洞路由 : /xxl-job-admin/jobinfo/remove 漏洞特征 : 无 @PermissionLimit 注解 方法内部无权限验证 允许普通用户删除系统任务 验证步骤 : 使用普通用户凭证登录系统 正常情况下不应有访问jobinfo的权限 构造删除请求 验证数据库确认任务已被删除 5. 漏洞挖掘方法论 5.1 Spring Web项目审计要点 安全配置审查 : 检查全局拦截器配置 分析权限控制机制 识别默认权限规则 权限控制检查 : 水平越权:相同权限用户间的越权 垂直越权:不同权限等级用户间的越权 路由审计方法 : 查找未受保护的路由(无权限注解) 检查方法内部是否缺少权限验证 可使用CodeQL等静态分析工具辅助审计 5.2 漏洞挖掘流程 分析系统权限架构 识别默认权限规则 枚举所有路由接口 筛选无保护的路由 验证潜在漏洞 6. 修复建议 立即修复措施 : 对所有敏感路由添加 @PermissionLimit 注解 在方法内部添加细粒度权限验证 长期安全加固 : 实施最小权限原则 建立默认拒绝的权限模型 定期进行安全审计 参考修复方案 : GitHub Issues讨论: https://github.com/xuxueli/xxl-job/issues/3772 https://github.com/xuxueli/xxl-job/issues/3773 7. 漏洞披露 本漏洞已提交至VulDB,正在等待CVE编号分配。 8. 总结 XXL-JOB作为广泛使用的分布式任务调度系统,其权限控制机制存在设计缺陷,导致多个IDOR漏洞。通过分析系统鉴权架构,可以系统性地发现此类安全问题。建议开发者重视权限控制设计,避免类似漏洞的发生。