Files
Java_Dm/WebErp/docs/security-vulnerability-self-check-report-2026-06-25.md
T
2026-07-03 16:23:51 +08:00

15 KiB
Raw Blame History

WebErp 安全漏洞自查工作自证材料

报告日期:2026-06-25
报告类型:企业安全漏洞定期自查与风险规避自证材料
适用范围:WebErp / weberp Spring Boot 后端项目
报告口径:对外自证,展示已开展的安全自查、已建设的风险规避措施、风险识别记录与后续处置安排。

1. 项目概况与扫描范围

本次自查对象为 WebErp 后端工程,核心模块为 WebErp/weberp。项目采用 Spring Boot、Maven、多数据库驱动、MyBatis、文件处理、Office 文档转换、远程资源下载、JWT 登录态、GraalJS 表达式执行等能力。

本次自查覆盖以下范围:

类别 覆盖内容 证据来源
依赖与构建 Maven 父子 POM、依赖树、关键第三方组件版本 WebErp/pom.xmlWebErp/weberp/pom.xmlweberp/target/dependency-tree.txt
配置安全 数据库连接、运行配置、跨域配置、脚本执行开关 application.propertiesCorsConfig.javaJsEngine.java
认证授权 Spring Security 入口放行、业务层登录校验、公开接口白名单 SecurityConfig.javaBaseHandler.javaPublicApiRegistry.java
SQL 安全 MyBatis 动态 SQL、SQL 片段校验、字段名白名单 mapper/*.xmlSqlSafetyGuard.java、SQL Provider 实现
文件与下载 文件路径校验、压缩包解压、远程下载、在线预览 FileUtil.javaZipUtil.javaRemoteDownloadGuard.javaToolsHandler.java
脚本与命令 GraalJS 沙箱配置、系统命令执行点复核 JsEngine.javaOfficeUtil.javaFormatFactoryUtil.java
自动化证据 安全回归测试、依赖树生成、工具可用性确认 SecurityRegressionTest.java、Maven 命令执行记录

说明:本报告为安全漏洞自查工作留档材料,不等同于第三方渗透测试报告或等保测评报告。

2. 自查方法与证据来源

本次自查采用静态代码扫描、配置审阅、依赖版本核验、关键安全控制点测试和公开漏洞库查询相结合的方式。

已执行并形成证据的检查项:

检查项 方法 结果
安全回归测试 执行 mvn -q -Dtest=SecurityRegressionTest test 通过,覆盖路径越权、Zip Slip、CORS、远程下载限制、SQL 片段校验、公开接口白名单等场景
Maven 依赖树 执行 Maven dependency tree 并输出到 weberp/target/dependency-tree.txt 已生成,可用于依赖版本留档
OSV 漏洞查询 对关键 Maven 组件进行 OSV API 查询 发现 Jackson databind 仍有一项新披露风险需跟踪
工具环境确认 检查本机 osv-scannerdependency-check 命令 当前环境未安装,已列入后续工具化改进
敏感配置审阅 扫描配置文件与安全相关关键字 发现数据库连接配置仍需脱敏入库治理,报告正文已脱敏展示

3. 风险识别记录台账

编号 风险名称 位置 等级 影响 现状证据 已有控制 处置方案 优先级
R-001 第三方依赖漏洞风险 com.fasterxml.jackson.core:jackson-databind:2.18.8 特定反序列化忽略属性绕过场景下,可能影响对象字段保护策略 OSV 查询命中 GHSA-5jmj-h7xm-6q6vOSV 标注修复版本为 2.18.9,但当前 Maven Central 未查询到该版本,本地 Maven 解析也失败 Jackson 已从旧版本升级到当前可打包版本;父 POM 已统一版本管理,避免父子 POM 版本漂移 持续跟踪可用修复版本;若 2.18.9 可解析则优先小版本升级;若不可用,则评估升级到后续可用安全版本并补跑兼容测试 P0
R-002 配置文件中存在真实数据库连接信息 weberp/src/main/resources/application.properties 第 12 行附近 若配置文件被外发或提交到共享仓库,可能导致数据库访问凭证泄露 配置文件中仍有真实数据库连接串;本报告仅记录脱敏形态:jdbc:dm://***:****/****?凭证=*** 已约定生产真实配置应放在部署服务器本地;报告中不展示真实地址、账号或密码 立即轮换已暴露凭证;将仓库配置改为示例值;补充 .gitignore 排除本地与生产真实配置文件;对历史提交和制品进行泄露排查 P0
R-003 动态接口入口开放面较大 SecurityConfig.javaBaseHandler.javaPublicApiRegistry.java 若业务层校验缺失,可能导致未授权访问 Spring Security 对动态 /Api/** 分发入口放行;业务层通过 @RequestCheck 和公开接口白名单进行控制 BaseHandler 已引入 PublicApiRegistry,未列入白名单的 CheckLogin=false 方法会回落为需要登录;未匹配请求默认拒绝 持续审计所有 CheckLogin=false 方法;新增公开接口必须进入白名单并经过安全复核;对模块数据、文件预览、下载接口默认保持登录态要求 P0
R-004 MyBatis 动态 SQL 拼接风险 mapper/*.xml${...} 片段及 SQL Provider 若外部输入直接进入 SQL 片段,可能造成 SQL 注入或越权查询 Mapper 文件中仍存在字段名、条件片段和完整 SQL 拼接点 已新增 SqlSafetyGuard;部分入口已对字段名、只读查询和条件片段进行白名单或危险关键字拦截 对所有 ${...} 来源建立清单;字段名改为服务端白名单;条件片段逐步参数化;无法立即改造的入口必须先接入 SqlSafetyGuard P0
R-005 远程 URL 下载与服务端请求风险 FileUtil.javaToolsHandler.javaWebUtil.javaCreateWordUtil.javaDateTimeUtil.java 若允许用户控制 URL,可能触发 SSRF、内网探测或下载超限 RemoteDownloadGuard 已接入部分下载流程;仍存在多个 URL 请求入口需要继续统一治理 RemoteDownloadGuard 限制协议、私有地址、链路本地地址、组播地址、重定向跳数和下载大小;配置项默认禁止私有地址 将残留 URL 请求入口统一接入远程下载守卫;重定向每跳复核;对在线预览类接口补充域名白名单或登录态要求 P0
R-006 文件路径穿越与压缩包解压风险 FileUtil.javaZipUtil.java 文件读写或解压过程若未限制根目录,可能覆盖非授权路径 已有路径规范化、根目录匹配和压缩条目路径校验;回归测试覆盖路径越权和 Zip Slip ZipUtil 对解压目标路径进行标准化并校验必须位于目标目录内;FileUtil 对文件虚拟路径和物理路径做规范化处理 持续保留回归测试;新增文件读写入口必须复用路径校验;压缩包处理增加大小和条目数量限制作为后续优化 P1
R-007 GraalJS 脚本全访问风险 JsEngine.javaapplication.properties 若脚本全访问开启,表达式可能访问宿主环境能力 app.js.allow-all-access=false 已配置;代码中仅在显式开启时允许全访问并输出告警 默认关闭 GraalJS 全访问;表达式执行使用独立上下文和缓存容量限制 保持默认关闭;若业务确需开启,必须形成变更审批、日志告警和最小权限说明;补充脚本危险语句测试 P1
R-008 系统命令执行点需持续复核 OfficeUtil.javaFormatFactoryUtil.java 若命令路径或参数可被外部输入污染,可能造成命令执行风险 代码中存在系统命令调用点,主要用于文件权限和格式转换 已将该类入口列为重点复核项;目前未在本报告中确认存在可利用外部输入链 对可执行文件路径、参数来源和工作目录进行白名单校验;禁止拼接 shell 字符串;记录命令执行审计日志 P1
R-009 CORS 白名单与响应头暴露需环境化治理 CorsConfig.java 若跨域源配置过宽,可能扩大凭证跨域风险 CORS 已采用白名单并允许携带凭证;测试覆盖不暴露全部响应头和拒绝异常方法 未使用通配源;限制请求方法;仅暴露必要响应头 将不同环境的允许源迁移到配置项;生产环境定期审计白名单;下线临时调试源 P1
R-010 安全扫描工具链不完整 本机工具环境 无法在本机直接运行标准化 OSV Scanner 或 OWASP Dependency-Check 当前命令行未安装 osv-scannerdependency-check 已通过 OSV API 和 Maven 依赖树进行替代性核验 在 CI 或发布机补齐依赖漏洞扫描工具;形成扫描报告归档;对高危漏洞建立阻断规则 P2
R-011 SQL 控制台日志与敏感信息日志风险 application.properties、SQL 调试配置 开启 SQL 输出时,可能在日志中暴露业务字段、查询条件或敏感参数 配置中存在 MyBatis 控制台日志相关项,当前仍需按环境复核 部分日志级别已关闭;安全回归测试覆盖部分响应头与令牌场景 生产环境关闭 SQL 明文输出;日志脱敏账号、手机号、凭证和令牌;建立日志留存与访问控制 P1

4. 已有安全控制与风险规避措施

控制领域 已有措施 自证说明
依赖治理 Maven 父 POM 统一管理关键组件版本;子模块保留真实业务依赖 降低父子 POM 版本漂移和重复依赖风险,便于后续集中升级
默认拒绝 Spring Security 未匹配请求使用默认拒绝策略 减少非预期接口暴露
公开接口收敛 PublicApiRegistry 集中维护公开方法 登录、验证码、基础系统信息等接口可公开;模块业务数据类接口默认需登录
登录态校验 BaseHandler 基于 @RequestCheck 统一执行登录和参数校验 对动态分发 API 提供统一拦截层
SQL 防护 SqlSafetyGuard 提供字段名、只读查询和条件片段校验 对高风险动态 SQL 入口先建立拦截,再逐步参数化
SSRF 防护 RemoteDownloadGuard 限制协议、地址类型、重定向和下载大小 对远程下载流程建立边界控制
文件路径防护 文件路径规范化、根目录校验、压缩包条目路径校验 防止路径穿越和 Zip Slip
CORS 控制 采用具体源白名单,未使用任意源通配 携带凭证场景下减少跨域滥用风险
JS 沙箱 GraalJS 全访问默认关闭 降低表达式执行访问宿主能力的风险
回归测试 SecurityRegressionTest 覆盖多项安全控制 形成可重复验证证据

5. 风险处置方案与整改优先级

优先级 处置事项 目标完成标准
P0 轮换并移除已提交配置中的真实数据库凭证 仓库配置仅保留示例值;真实配置仅存在于部署服务器本地;历史暴露凭证完成轮换
P0 跟踪 Jackson databind 修复版本 修复版本可解析后完成升级、打包和安全回归测试;若采用后续可用安全版本,完成兼容验证
P0 动态 SQL 治理 所有 ${...} 来源登记;外部输入不得直接进入 SQL 片段;关键路径完成白名单或参数化
P0 远程 URL 请求统一防护 所有用户可控 URL 请求入口接入 RemoteDownloadGuard 或域名白名单;重定向每跳校验
P0 公开接口白名单治理 CheckLogin=false 方法均有业务必要性说明;未列入公开白名单的接口必须要求登录
P1 CORS 与日志生产化治理 CORS 源按环境配置;生产关闭 SQL 明文输出;日志中敏感字段完成脱敏
P1 命令执行点复核 可执行文件路径与参数来源白名单化;禁止 shell 字符串拼接;补充审计日志
P2 安全扫描工具链补齐 CI 或发布流程中加入 OSV Scanner 或 OWASP Dependency-Check,并归档扫描结果

6. 定期漏洞自查机制

建议建立以下周期化机制,并将结果作为企业安全漏洞自查自证材料留档:

周期 自查动作 输出材料
每月 依赖漏洞扫描、Maven 依赖树归档、关键漏洞公告复核 依赖漏洞扫描记录、风险处置台账
每季度 代码安全自查,重点检查鉴权、SQL、文件、远程请求、脚本执行、日志脱敏 季度安全自查报告、整改跟踪表
每次发版前 执行安全回归测试、检查配置是否含真实凭证、复核新增公开接口 发版安全检查清单、测试结果截图或日志
重大漏洞公告后 针对影响组件进行应急排查、临时规避、升级验证 应急响应记录、修复验证记录
配置变更时 复核数据库、Redis、短信、推送、跨域源等配置 配置变更审批与脱敏检查记录

建议固定归档材料:

  • Maven 依赖树与关键依赖版本清单。
  • OSV Scanner 或 OWASP Dependency-Check 报告。
  • 安全回归测试结果。
  • 风险识别记录与处置状态表。
  • 配置脱敏检查记录。
  • 公开接口白名单审计记录。

7. 附件证据清单

证据项 文件或命令 说明
安全回归测试 mvn -q -Dtest=SecurityRegressionTest test 已通过,覆盖路径、压缩包、CORS、远程下载、SQL 与公开接口控制
依赖树 weberp/target/dependency-tree.txt 已生成,用于记录当前第三方组件版本
依赖漏洞来源 OSV GHSA-5jmj-h7xm-6q6v Jackson databind 新披露风险来源
鉴权控制 SecurityConfig.javaBaseHandler.javaPublicApiRegistry.java 入口放行、业务层校验与公开接口白名单
SQL 控制 SqlSafetyGuard.javamapper/*.xml 动态 SQL 风险识别与部分防护落点
下载控制 RemoteDownloadGuard.javaFileUtil.java 远程下载协议、地址、重定向和大小控制
文件控制 FileUtil.javaZipUtil.java 路径规范化、根目录校验和 Zip Slip 防护
脚本控制 JsEngine.javaapplication.properties GraalJS 全访问默认关闭
工具环境限制 osv-scanner --versiondependency-check --version 当前本机未安装,建议在 CI 或发布机补齐

8. 结论

本项目已开展面向依赖、配置、认证授权、SQL、文件处理、远程下载、脚本执行、跨域和回归测试的安全漏洞自查工作,并已具备多项风险规避措施。当前风险主要集中在配置凭证治理、Jackson 新披露漏洞跟踪、动态 SQL 全量收敛、残留远程 URL 请求统一防护和生产环境安全配置固化。

上述事项已纳入整改跟踪台账。后续通过定期扫描、发版前安全检查、重大漏洞应急复核和自动化安全回归测试,持续证明企业具备安全漏洞风险识别、处置和规避能力。