JeecgBoot /datarule文件授权问题漏洞

JeecgBoot /datarule文件授权问题漏洞分析与修复指南

一、漏洞概述

JeecgBoot是一款基于SpringBoot + Vue3的企业级低代码开发平台,凭借高效的代码生成能力、灵活的权限管理体系被广泛应用于政企、互联网项目开发。其/datarule模块存在授权校验缺陷,未授权用户或低权限用户可绕过权限限制,直接访问并操作核心数据规则配置,引发敏感数据泄露、权限体系崩溃等严重安全风险。

二、影响版本

JeecgBoot 3.5.3及以下版本(以官方正式修复版本为准,建议参考JeecgBoot官方安全公告确认精准范围)。

三、漏洞原理

JeecgBoot的/datarule模块负责系统数据权限规则的配置与管理,控制不同角色用户的数据访问范围。后端DataRuleController类的核心操作接口存在权限校验漏洞:

  1. 权限注解缺失:列表查询、删除、编辑等核心方法未添加JeecgBoot标准权限注解@PreAuth,身份校验与权限判定环节完全失效;
  2. 注解逻辑错误:部分接口虽配置权限注解,但注解权限标识为空或与实际权限体系不匹配,无法拦截未授权请求。

漏洞代码示例(简化版)

@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":"删除成功"},目标规则被非法删除,关联角色的数据访问权限直接失效。

五、漏洞危害

  1. 敏感数据泄露:攻击者可获取系统全量数据权限规则,掌握数据库表结构、字段权限、角色数据范围等核心信息,为SQL注入、数据窃取等后续攻击提供精准支撑;
  2. 权限体系破坏:低权限用户可越权修改、删除数据规则,导致高权限用户被限制数据访问,普通用户获取敏感业务数据;
  3. 系统可用性风险:核心数据规则被删除后,大量业务接口会因数据过滤逻辑失效抛出异常,引发系统部分功能瘫痪。

六、修复方案

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、高频访问等异常行为实时告警。

七、应急响应建议

  1. 紧急排查:通过服务器日志梳理/dataRule接口的访问记录,识别未授权IP与异常操作,判断是否存在数据泄露或权限篡改;
  2. 配置恢复:若发现数据规则被篡改,立即从备份中恢复规则配置,恢复系统正常权限逻辑;
  3. 访问限制:通过Nginx或WAF临时拦截/dataRule接口的外部请求,仅允许内部IP或授权管理员IP访问,缩小攻击面。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。


评论 (0)