chore: import Java_DmK project
This commit is contained in:
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,123 @@
|
||||
# WebErp 安全漏洞自查工作自证材料
|
||||
|
||||
报告日期:2026-06-25
|
||||
报告类型:企业安全漏洞定期自查与风险规避自证材料
|
||||
适用范围:WebErp / weberp Spring Boot 后端项目
|
||||
报告口径:对外自证,展示已开展的安全自查、已建设的风险规避措施、风险识别记录与后续处置安排。
|
||||
|
||||
## 1. 项目概况与扫描范围
|
||||
|
||||
本次自查对象为 WebErp 后端工程,核心模块为 `WebErp/weberp`。项目采用 Spring Boot、Maven、多数据库驱动、MyBatis、文件处理、Office 文档转换、远程资源下载、JWT 登录态、GraalJS 表达式执行等能力。
|
||||
|
||||
本次自查覆盖以下范围:
|
||||
|
||||
| 类别 | 覆盖内容 | 证据来源 |
|
||||
| --- | --- | --- |
|
||||
| 依赖与构建 | Maven 父子 POM、依赖树、关键第三方组件版本 | `WebErp/pom.xml`、`WebErp/weberp/pom.xml`、`weberp/target/dependency-tree.txt` |
|
||||
| 配置安全 | 数据库连接、运行配置、跨域配置、脚本执行开关 | `application.properties`、`CorsConfig.java`、`JsEngine.java` |
|
||||
| 认证授权 | Spring Security 入口放行、业务层登录校验、公开接口白名单 | `SecurityConfig.java`、`BaseHandler.java`、`PublicApiRegistry.java` |
|
||||
| SQL 安全 | MyBatis 动态 SQL、SQL 片段校验、字段名白名单 | `mapper/*.xml`、`SqlSafetyGuard.java`、SQL Provider 实现 |
|
||||
| 文件与下载 | 文件路径校验、压缩包解压、远程下载、在线预览 | `FileUtil.java`、`ZipUtil.java`、`RemoteDownloadGuard.java`、`ToolsHandler.java` |
|
||||
| 脚本与命令 | GraalJS 沙箱配置、系统命令执行点复核 | `JsEngine.java`、`OfficeUtil.java`、`FormatFactoryUtil.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-scanner` 与 `dependency-check` 命令 | 当前环境未安装,已列入后续工具化改进 |
|
||||
| 敏感配置审阅 | 扫描配置文件与安全相关关键字 | 发现数据库连接配置仍需脱敏入库治理,报告正文已脱敏展示 |
|
||||
|
||||
## 3. 风险识别记录台账
|
||||
|
||||
| 编号 | 风险名称 | 位置 | 等级 | 影响 | 现状证据 | 已有控制 | 处置方案 | 优先级 |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| R-001 | 第三方依赖漏洞风险 | `com.fasterxml.jackson.core:jackson-databind:2.18.8` | 高 | 特定反序列化忽略属性绕过场景下,可能影响对象字段保护策略 | OSV 查询命中 `GHSA-5jmj-h7xm-6q6v`;OSV 标注修复版本为 `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.java`、`BaseHandler.java`、`PublicApiRegistry.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.java`、`ToolsHandler.java`、`WebUtil.java`、`CreateWordUtil.java`、`DateTimeUtil.java` | 高 | 若允许用户控制 URL,可能触发 SSRF、内网探测或下载超限 | `RemoteDownloadGuard` 已接入部分下载流程;仍存在多个 URL 请求入口需要继续统一治理 | `RemoteDownloadGuard` 限制协议、私有地址、链路本地地址、组播地址、重定向跳数和下载大小;配置项默认禁止私有地址 | 将残留 URL 请求入口统一接入远程下载守卫;重定向每跳复核;对在线预览类接口补充域名白名单或登录态要求 | P0 |
|
||||
| R-006 | 文件路径穿越与压缩包解压风险 | `FileUtil.java`、`ZipUtil.java` | 中 | 文件读写或解压过程若未限制根目录,可能覆盖非授权路径 | 已有路径规范化、根目录匹配和压缩条目路径校验;回归测试覆盖路径越权和 Zip Slip | `ZipUtil` 对解压目标路径进行标准化并校验必须位于目标目录内;`FileUtil` 对文件虚拟路径和物理路径做规范化处理 | 持续保留回归测试;新增文件读写入口必须复用路径校验;压缩包处理增加大小和条目数量限制作为后续优化 | P1 |
|
||||
| R-007 | GraalJS 脚本全访问风险 | `JsEngine.java`、`application.properties` | 中 | 若脚本全访问开启,表达式可能访问宿主环境能力 | `app.js.allow-all-access=false` 已配置;代码中仅在显式开启时允许全访问并输出告警 | 默认关闭 GraalJS 全访问;表达式执行使用独立上下文和缓存容量限制 | 保持默认关闭;若业务确需开启,必须形成变更审批、日志告警和最小权限说明;补充脚本危险语句测试 | P1 |
|
||||
| R-008 | 系统命令执行点需持续复核 | `OfficeUtil.java`、`FormatFactoryUtil.java` | 中 | 若命令路径或参数可被外部输入污染,可能造成命令执行风险 | 代码中存在系统命令调用点,主要用于文件权限和格式转换 | 已将该类入口列为重点复核项;目前未在本报告中确认存在可利用外部输入链 | 对可执行文件路径、参数来源和工作目录进行白名单校验;禁止拼接 shell 字符串;记录命令执行审计日志 | P1 |
|
||||
| R-009 | CORS 白名单与响应头暴露需环境化治理 | `CorsConfig.java` | 中 | 若跨域源配置过宽,可能扩大凭证跨域风险 | CORS 已采用白名单并允许携带凭证;测试覆盖不暴露全部响应头和拒绝异常方法 | 未使用通配源;限制请求方法;仅暴露必要响应头 | 将不同环境的允许源迁移到配置项;生产环境定期审计白名单;下线临时调试源 | P1 |
|
||||
| R-010 | 安全扫描工具链不完整 | 本机工具环境 | 低 | 无法在本机直接运行标准化 OSV Scanner 或 OWASP Dependency-Check | 当前命令行未安装 `osv-scanner` 与 `dependency-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](https://osv.dev/vulnerability/GHSA-5jmj-h7xm-6q6v) | Jackson databind 新披露风险来源 |
|
||||
| 鉴权控制 | `SecurityConfig.java`、`BaseHandler.java`、`PublicApiRegistry.java` | 入口放行、业务层校验与公开接口白名单 |
|
||||
| SQL 控制 | `SqlSafetyGuard.java`、`mapper/*.xml` | 动态 SQL 风险识别与部分防护落点 |
|
||||
| 下载控制 | `RemoteDownloadGuard.java`、`FileUtil.java` | 远程下载协议、地址、重定向和大小控制 |
|
||||
| 文件控制 | `FileUtil.java`、`ZipUtil.java` | 路径规范化、根目录校验和 Zip Slip 防护 |
|
||||
| 脚本控制 | `JsEngine.java`、`application.properties` | GraalJS 全访问默认关闭 |
|
||||
| 工具环境限制 | `osv-scanner --version`、`dependency-check --version` | 当前本机未安装,建议在 CI 或发布机补齐 |
|
||||
|
||||
## 8. 结论
|
||||
|
||||
本项目已开展面向依赖、配置、认证授权、SQL、文件处理、远程下载、脚本执行、跨域和回归测试的安全漏洞自查工作,并已具备多项风险规避措施。当前风险主要集中在配置凭证治理、Jackson 新披露漏洞跟踪、动态 SQL 全量收敛、残留远程 URL 请求统一防护和生产环境安全配置固化。
|
||||
|
||||
上述事项已纳入整改跟踪台账。后续通过定期扫描、发版前安全检查、重大漏洞应急复核和自动化安全回归测试,持续证明企业具备安全漏洞风险识别、处置和规避能力。
|
||||
Reference in New Issue
Block a user