jeesite5 BOPLA VULNs Report
审计报告(jeesite5)
生成时间:2026-04-25
范围说明
-
仅基于当前仓库代码分析
-
按「入口授权 → sink 写入 → 后续生效点」链路收敛
-
本文为代码级初筛结果,不等同最终裁决
漏洞接口一览
POST ${adminPath}/sys/empUser/save
POST ${adminPath}/sys/empUser/importData
POST ${adminPath}/cms/article/save
POST ${adminPath}/sys/post/save
Issue 1:员工编辑越权(组织/岗位重绑定)
接口
POST ${adminPath}/sys/empUser/save
缺失检查
-
empUser.employee.office.officeCode
-
empUser.employee.company.companyCode
-
empUser.employee.employeePostList[].postCode
-
empUser.employee.employeeOfficeList[].officeCode
-
empUser.employee.employeeOfficeList[].postCode
核心问题
入口仅校验目标用户是否在可见范围内,但未校验:
“提交的新组织 / 公司 / 岗位是否属于当前操作者的可管理范围”
链路
-
入口:仅 sys:empUser:edit / authRole + 单对象 data scope
-
sink:
-
employeeService.save
-
employeeOfficeDao.insertBatch
-
employeePostList 删除重建
-
-
生效点:
-
addDataScopeFilter 使用 office/company
-
switchPost / switchOffice 写入 session.roleCode
-
风险结论
对象壳校验正确,但内部属性完全可控 → 典型属性级越权写
人工审计结论
最大危害(给开发者一句话)
-
低权限管理员可将可管理用户重绑定到其权限范围之外的公司、机构或岗位,从而污染数据权限边界,并在岗位权限模式下间接获得不应拥有的角色权限。
最佳修复建议
-
在保存前逐项校验:
-
officeCode / companyCode / postCode
必须全部属于当前操作者数据权限范围,否则整体拒绝。
-
Issue 2:批量导入越权(组织重绑定放大)
接口
POST ${adminPath}/sys/empUser/importData
缺失检查
-
importedEmpUser.employee.office.officeCode
-
importedEmpUser.employee.company.companyCode
核心问题
-
importData → 直接调用 save
-
未做逐行权限校验
本质
Issue 1 的批量放大版本
风险结论
-
单次操作 → 多用户越权写入
人工审计结论
最大危害
-
攻击者可通过批量导入一次性篡改大量员工的组织归属,造成系统级权限边界污染。
最佳修复
-
在 importData 中逐行校验:
-
officeCode / companyCode 必须可管理
-
任一不合法 → 拒绝该行
-
Issue 3:文章写入(栏目/状态控制)
接口
POST ${adminPath}/cms/article/save
缺失检查
-
article.category.id
-
article.status
分析结论
-
写路径未校验 category 权限
-
但存在:
-
查询侧 data scope 控制
-
审核流(可能存在补偿)
-
人工结论
❌ 不是漏洞(偏业务设计)
Issue 4:岗位角色绑定越权(权限侧门)
接口
POST ${adminPath}/sys/post/save
缺失检查
-
post.roleCodes
核心问题
系统存在两条“角色授予路径”:
| 路径 | 权限控制 |
|---|---|
| 用户直接授权 | sys:empUser:authRole(受控) |
| 岗位绑定角色 | sys:post:edit(未受控) |
当:
user.postRolePermi = true
岗位角色 → 会进入用户 session.roleCode
链路
-
入口:sys:post:edit
-
sink:
-
删除旧 PostRole
-
插入新 roleCodes
-
-
生效点:
-
switchPost → 写 session.roleCode
-
switchOffice → 聚合 roleCode
-
登录返回 roleCode
-
本质
用“岗位编辑权限”绕过“用户授权权限”
人工审计结论
最大危害(给开发者一句话)
-
具备岗位编辑权限的低权限用户可以通过修改 post.roleCodes 赋予岗位高权限角色,并在岗位切换后生效,从而绕过专门的用户角色授权控制路径,实现权限提升。
最佳修复建议
-
在 PostService.save 中增加角色上界校验:
-
post.roleCodes ⊆ 当前操作者可授角色集合
-
-
或:
-
将岗位角色绑定纳入 sys:empUser:authRole 同级权限控制
-
-
或:
-
在 user.postRolePermi=true 时,限制岗位编辑者不能修改 roleCodes
-
总体结论
本批问题的共性:
1️⃣ 典型缺陷模式
入口有权限 → sink 缺对象/属性约束
集中表现为:
-
数据范围(Data Scope)只作用于“查询”
-
写路径完全信任请求参数
2️⃣ 风险分级建议
| Issue | 风险 |
|---|---|
| Issue 1 | 高(权限边界污染) |
| Issue 2 | 高(批量放大) |
| Issue 3 | 低(设计问题) |
| Issue 4 | 高(权限绕过/提权) |
3️⃣ 一句话总结(可放报告开头)
当前系统的主要安全问题在于:数据权限控制只在读取阶段生效,而在写入阶段未对关键组织与角色属性做一致性校验,导致低权限用户可通过合法入口构造越权数据关系,进而在后续权限判定中被系统“合法化”。

浙公网安备 33010602011771号