JeecgBoot /datarule文件授权问题漏洞
JeecgBoot /datarule文件授权问题漏洞分析与修复指南
一、漏洞概述
JeecgBoot是一款基于SpringBoot + Vue3的企业级低代码开发平台,凭借高效的代码生成能力、灵活的权限管理体系被广泛应用于政企、互联网项目开发。其/datarule模块存在授权校验缺陷,未授权用户或低权限用户可绕过权限限制,直接访问并操作核心数据规则配置,引发敏感数据泄露、权限体系崩溃等严重安全风险。
二、影响版本
JeecgBoot 3.5.3及以下版本(以官方正式修复版本为准,建议参考JeecgBoot官方安全公告确认精准范围)。
三、漏洞原理
JeecgBoot的/datarule模块负责系统数据权限规则的配置与管理,控制不同角色用户的数据访问范围。后端DataRuleController类的核心操作接口存在权限校验漏洞:
- 权限注解缺失:列表查询、删除、编辑等核心方法未添加JeecgBoot标准权限注解
@PreAuth,身份校验与权限判定环节完全失效; - 注解逻辑错误:部分接口虽配置权限注解,但注解权限标识为空或与实际权限体系不匹配,无法拦截未授权请求。
漏洞代码示例(简化版)
@RestController
@RequestMapping("/dataRule")
public class DataRuleController extends BaseController {
// 无权限校验,任意用户可获取全量数据规则
@GetMapping("/list")
public Result<List<DataRuleVO>> list(DataRuleDTO dataRuleDTO) {
List<DataRuleVO> list = dataRuleService.listDataRule(dataRuleDTO);
return Result.OK(list);
}
// 权限注解配置无效,低权限用户可删除规则
@DeleteMapping("/delete/{id}")
@PreAuth("hasPermission('','')") // 空权限标识等同于无校验
public Result<String> delete(@PathVariable String id) {
dataRuleService.deleteById(id);
return Result.OK("删除成功");
}
}
数据规则中包含ruleSql(数据库过滤SQL语句)、dataScope(数据范围)、roleId(关联角色)等敏感信息,攻击者可通过未授权接口直接获取,或随意删除规则破坏权限体系。
四、漏洞复现步骤
环境准备
下载JeecgBoot 3.5.0版本(存在漏洞的版本),完成本地或远程部署,无需登录系统即可发起测试。
1. 未授权获取数据规则列表
构造GET请求访问接口:
GET /dataRule/list HTTP/1.1
Host: your-jeecg-domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json, text/plain, */*
响应结果:返回JSON格式的全量数据规则,包含每条规则的过滤SQL、关联角色、数据范围等敏感字段。
2. 未授权删除数据规则
构造DELETE请求删除指定ID的规则:
DELETE /dataRule/delete/1 HTTP/1.1
Host: your-jeecg-domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json, text/plain, */*
响应结果:返回{"result":"success","message":"删除成功"},目标规则被非法删除,关联角色的数据访问权限直接失效。
五、漏洞危害
- 敏感数据泄露:攻击者可获取系统全量数据权限规则,掌握数据库表结构、字段权限、角色数据范围等核心信息,为SQL注入、数据窃取等后续攻击提供精准支撑;
- 权限体系破坏:低权限用户可越权修改、删除数据规则,导致高权限用户被限制数据访问,普通用户获取敏感业务数据;
- 系统可用性风险:核心数据规则被删除后,大量业务接口会因数据过滤逻辑失效抛出异常,引发系统部分功能瘫痪。
六、修复方案
1. 官方版本升级
直接升级JeecgBoot至3.5.4及以上版本,官方已在新版本中重构DataRuleController的权限校验逻辑,全面修复授权缺陷(可从JeecgBoot官方GitHub仓库或官网下载最新版本)。
2. 临时修复(无法立即升级时)
对DataRuleController的核心方法添加标准权限校验注解,示例如下:
@RestController
@RequestMapping("/dataRule")
public class DataRuleController extends BaseController {
// 仅允许拥有"system:dataRule:list"权限的用户访问
@GetMapping("/list")
@PreAuth("hasPermission('system:dataRule:list','system:dataRule:list')")
public Result<List<DataRuleVO>> list(DataRuleDTO dataRuleDTO) {
List<DataRuleVO> list = dataRuleService.listDataRule(dataRuleDTO);
return Result.OK(list);
}
// 仅允许拥有"system:dataRule:delete"权限的用户执行删除
@DeleteMapping("/delete/{id}")
@PreAuth("hasPermission('system:dataRule:delete','system:dataRule:delete')")
public Result<String> delete(@PathVariable String id) {
dataRuleService.deleteById(id);
return Result.OK("删除成功");
}
}
注解中hasPermission的两个参数需与JeecgBoot权限系统中的权限编码、权限名称保持一致。
3. 全局安全加固
- 开启JeecgBoot全局权限拦截,配置Spring Security过滤器链,拦截所有未授权的API请求;
- 对
/dataRule、/system/role等权限核心接口添加日志监控,针对未授权IP、高频访问等异常行为实时告警。
七、应急响应建议
- 紧急排查:通过服务器日志梳理
/dataRule接口的访问记录,识别未授权IP与异常操作,判断是否存在数据泄露或权限篡改; - 配置恢复:若发现数据规则被篡改,立即从备份中恢复规则配置,恢复系统正常权限逻辑;
- 访问限制:通过Nginx或WAF临时拦截
/dataRule接口的外部请求,仅允许内部IP或授权管理员IP访问,缩小攻击面。
评论 (0)