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接口,注册了两个关键拦截器:
-
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
- GitHub Issues讨论:
7. 漏洞披露
本漏洞已提交至VulDB,正在等待CVE编号分配。
8. 总结
XXL-JOB作为广泛使用的分布式任务调度系统,其权限控制机制存在设计缺陷,导致多个IDOR漏洞。通过分析系统鉴权架构,可以系统性地发现此类安全问题。建议开发者重视权限控制设计,避免类似漏洞的发生。