chore: import Java_DmK project

This commit is contained in:
czc
2026-07-03 16:23:51 +08:00
commit 538b4931dd
200 changed files with 74913 additions and 0 deletions
@@ -0,0 +1,177 @@
# 安全漏洞自查工作自证材料
报告日期:2026-06-24
项目名称:LSERP-MES / WebErp Java 后端
报告用途:企业定期安全漏洞自查、风险识别记录、风险规避与处置方案留档
报告性质:代码与配置层面的自查材料,不替代第三方渗透测试、等保测评或生产环境安全审计。
## 1. 项目概况与扫描范围
本次自查覆盖当前工作区 `E:\JavaBackend\Java_DmK` 下的 Java 后端项目,重点模块为:
| 范围 | 说明 |
| --- | --- |
| `WebErp/pom.xml` | Maven 父模块、依赖管理、仓库配置 |
| `WebErp/weberp/pom.xml` | Spring Boot 子模块、运行依赖、构建配置 |
| `WebErp/weberp/src/main/resources/application.properties` | 应用端口、数据源、Redis、JWT、连接池及资源治理配置 |
| `WebErp/weberp/src/main/java/org/example` | 认证授权、接口分发、文件上传下载、SQL、脚本、XML、资源管理等业务代码 |
| `WebErp/weberp/src/main/resources/mapper` | MyBatis XML 映射与动态 SQL |
| `WebErp/weberp/src/test/java/org/example` | 安全与资源治理回归测试 |
本次自查重点覆盖以下风险域:
- 第三方组件与依赖漏洞。
- 明文敏感配置与凭证泄露风险。
- 认证授权、CSRF、CORS、接口开放面。
- SQL 注入与动态 SQL 拼接。
- 文件上传、下载、路径穿越、压缩包解压。
- 脚本执行、XML 反序列化、系统命令调用。
- 资源泄漏、缓存与线程池治理。
## 2. 自查方法与证据来源
| 方法 | 证据说明 |
| --- | --- |
| 静态文件扫描 | 使用 `rg` 对认证、文件、SQL、脚本、XML、敏感配置等关键字进行扫描。 |
| 依赖清单抽取 | 从 `WebErp/pom.xml``WebErp/weberp/pom.xml` 提取直接声明的 Maven 依赖版本。 |
| OSV 漏洞库核验 | 使用 OSV API 对已声明依赖版本进行公开漏洞匹配。 |
| 代码证据复核 | 抽查 Spring Security、CORS、文件工具、Zip 工具、JWT、脚本执行、测试用例等关键文件。 |
| 回归测试证据核对 | 识别已有安全回归测试覆盖点,包括路径穿越、Zip Slip、CORS、JWT、资源治理等。 |
环境限制:
- 当前扫描环境未发现可用 `mvn` 命令,因此未执行 `mvn test`、Maven 依赖树生成或 OWASP Dependency-Check。
- Git 状态读取触发 safe.directory 所有权保护,本次报告不依赖 Git 状态作为证据。
- OSV 查询基于 POM 中直接声明或可解析的依赖,不代表完整运行时传递依赖的最终结论;后续应补充完整依赖树扫描。
## 3. 风险识别记录台账
| 编号 | 风险名称 | 位置 | 等级 | 影响 | 现状证据 | 处置方案 | 优先级 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| R-001 | Jackson 组件存在公开漏洞 | `WebErp/pom.xml``WebErp/weberp/pom.xml` 中 Jackson 2.18.3 | 高 | 可能导致反序列化绕过、SSRF、拒绝服务等风险,取决于业务是否启用相关 Jackson 特性和输入面。 | OSV 命中 `jackson-core``jackson-databind` 多条风险:GHSA-72hv-8253-57qq、GHSA-5jmj-h7xm-6q6v、GHSA-hgj6-7826-r7m5、GHSA-j3rv-43j4-c7qm、GHSA-rmj7-2vxq-3g9f。 | 将 Jackson 统一升级到已修复版本,建议优先评估 2.18.9 或与 Spring Boot 版本兼容的更高补丁版本;升级后回归 JSON 序列化、接口响应、文件预览和鉴权流程。 | P0,建议 2026-07-01 前完成 |
| R-002 | SQL Server JDBC 驱动存在公开漏洞 | `WebErp/pom.xml``WebErp/weberp/pom.xml``mssql-jdbc` 12.8.1.jre11 | 高 | 可能受不当输入校验问题影响;若系统连接 SQL Server 或保留相关驱动运行时可用,则存在组件风险。 | OSV 命中 GHSA-m494-w24q-6f7w / CVE-2025-59250,修复版本包含 12.8.2.jre11、12.10.2.jre11 等。 | 若仍需 SQL Server 支持,升级到至少 12.8.2.jre11,建议评估 12.10.2.jre11;若不再使用,移除依赖和相关配置。 | P0,建议 2026-07-01 前完成 |
| R-003 | 数据库连接串包含明文账号密码 | `WebErp/weberp/src/main/resources/application.properties:16` 及注释历史连接串 | 高 | 代码仓库、构建包或日志泄露时可能造成数据库凭证泄露和横向访问风险。 | 配置文件中存在形如 `jdbc:dm://***:****/***?user=***&password=***&host={hostname}` 的连接串;报告已脱敏,不展示真实 IP、账号和密码。 | 迁移到环境变量、启动参数、KMS/密钥管理服务或配置中心;清理注释中的历史账号密码;轮换已暴露账号密码;限制数据库账号权限和来源 IP。 | P0,建议 2026-07-01 前完成 |
| R-004 | 认证入口开放面较大,依赖业务层二次校验 | `SecurityConfig.java:14-44`、各 Controller 的 `@RequestCheck` | 高 | Spring Security 对多组 `/Api/**` 路径 `permitAll`,若业务层注解或反射分发漏配,可能形成未授权访问。 | `SecurityConfig` 仅对未匹配请求 `denyAll`;业务方法依赖 `@RequestCheck(CheckLogin = true/false)` 控制登录态。 | 梳理免登录白名单,仅保留登录、验证码、公开配置等必要接口;对反射分发方法建立默认强制登录策略;为高风险操作增加服务端权限校验测试。 | P0,建议 2026-07-05 前完成 |
| R-005 | CSRF 对核心 API 路径豁免 | `SecurityConfig.java:14-22` | 中 | 如浏览器 Cookie 或会话凭证可跨站携带,写操作接口可能被跨站请求利用。 | 多个 `/Api/**` 路径被配置为 CSRF 忽略;系统同时配置 CORS 凭证支持。 | 对 Cookie 会话场景启用 CSRF Token;若完全使用 Bearer Token,确保 Token 不存放于可被跨站自动携带的 Cookie;对写操作要求 `Authorization` 并校验 Origin/Referer。 | P1,建议 2026-07-10 前完成 |
| R-006 | CORS 允许携带凭证且允许请求头通配 | `CorsConfig.java:15-41` | 中 | 跨域来源若配置过宽,可能扩大凭证使用面和数据读取面。 | CORS 配置指定多个来源、`setAllowCredentials(true)``addAllowedHeader("*")`,已有测试覆盖拒绝 TRACE 方法和不暴露所有响应头。 | 将来源列表改为环境化配置;生产环境只保留正式前端域名;限制允许请求头;保留并扩展 CORS 回归测试。 | P1,建议 2026-07-10 前完成 |
| R-007 | MyBatis `${}` 动态拼接存在 SQL 注入风险 | `mapper/PageBreaks.xml``mapper/DMCrmMapper.xml``mapper/CustomerMapper.xml` | 高 | `${}` 会直接拼接 SQL 文本,若字段名、条件、排序或 SQL 片段来自用户输入,可能导致 SQL 注入。 | 扫描发现 `${sql}``${keyName}``${condition}` 等动态拼接;部分业务代码也存在大量 `String.format` / 拼接式 SQL。 | 将值参数改为 `#{}`;对表名、字段名、排序、条件片段使用服务端白名单枚举;禁止前端直接传 SQL;对无法立即改造的动态 SQL 增加 `SqlAnalyzer` 校验和审计日志。 | P0,建议 2026-07-05 前完成 |
| R-008 | 远程 URL 下载文件可能形成 SSRF | `FileUploadController.java``FileUtil.DownLoadFile``downloadFile``asyncDownload` | 高 | 若用户可控 URL 被服务端下载,可能访问内网、云元数据地址或敏感管理端口。 | 文件上传逻辑支持 `url` 参数触发远程下载,工具类包含多处 HTTP 下载方法。 | 增加 URL 协议、域名、IP 网段、端口白名单;阻断内网地址、回环地址、链路本地地址、云元数据地址;限制重定向和文件大小;记录下载审计日志。 | P0,建议 2026-07-05 前完成 |
| R-009 | 文件上传类型与路径风险需持续治理 | `FileUtil.java``FileUploadController.java` | 中 | 文件类型、文件名、路径校验缺陷可能导致任意文件写入、恶意文件上传或越权读取。 | 已存在扩展名白名单、危险类型黑名单、路径权限校验;测试覆盖伪造根目录名绕过场景。 | 保持服务端真实路径归一化校验;增加 MIME/文件魔数校验;上传目录禁止脚本执行;限制单文件大小和总量;对下载、删除、移动操作统一权限校验。 | P1,建议 2026-07-15 前完成 |
| R-010 | Zip Slip 解压路径穿越风险已识别并有控制 | `ZipUtil.java``SecurityRegressionTest.java` | 中 | 恶意压缩包可能通过 `../` 写出目标目录,覆盖系统文件。 | `ZipUtil` 使用目标根路径 normalize 后校验 `startsWith(targetRoot)`;测试覆盖 `../escaped.txt` 解压逃逸。 | 保留现有校验;补充压缩包大小、条目数、单文件大小、解压后总大小限制,防止 Zip Bomb。 | P1,建议 2026-07-15 前完成 |
| R-011 | GraalJS 允许全访问,动态脚本执行面较高 | `JsEngine.java:39-40``JsEngine.java:99` | 高 | 若脚本内容或上下文参数可被用户控制,可能造成任意 Java 访问、敏感信息读取或命令执行链。 | `polyglot.js.allowAllAccess` 被设置为 `true`,并执行 `engine.eval(statement, context)`。 | 默认关闭 `allowAllAccess`;只允许执行受控表达式;对脚本来源进行白名单管理;限制执行时间和可访问对象;为脚本执行增加审计日志和安全测试。 | P0,建议 2026-07-05 前完成 |
| R-012 | XML 反序列化需禁用外部实体与 DTD | `XmlUtil.java` | 中 | XML 输入若来自不可信来源,可能存在 XXE、SSRF、文件读取等风险。 | 使用 JAXB `Unmarshaller` 反序列化 XML,当前未显式展示禁用外部实体和 DTD 的配置。 | 使用安全 XML 解析器配置,禁用 DTD、外部实体、外部 schema;限制 XML 大小;对不可信 XML 输入增加测试样例。 | P1,建议 2026-07-15 前完成 |
| R-013 | 系统命令调用需白名单与参数隔离 | `OfficeUtil.java``FormatFactoryUtil.java` | 中 | 外部程序路径或参数若可控,可能形成命令执行、权限扩大或路径劫持风险。 | 扫描发现 `Runtime.getRuntime().exec``ProcessBuilder` 用于文件权限或格式转换。 | 固定可执行文件路径;参数使用数组传递且禁止拼接 shell;校验文件路径位于工作目录;记录执行日志和失败告警;避免 `chmod 777` 等过宽权限。 | P1,建议 2026-07-15 前完成 |
| R-014 | 资源治理已有控制但需纳入定期复核 | `ResourceGovernanceConfig.java``RequestCleanupFilter.java``ResourceGovernanceRegressionTest.java` | 低 | 缓存、线程池、动态数据源若失控,可能导致内存泄漏、连接泄漏或拒绝服务。 | 已有缓存容量、JS 缓存容量、线程池队列、动态连接池关闭等配置和回归测试。 | 保留容量上限;接入运行监控;对连接池活跃数、队列积压、缓存命中率和异常关闭建立告警。 | P2,建议 2026-07-31 前完成 |
| R-015 | 构建与依赖治理流程不完整 | 当前环境与 POM | 中 | 缺少稳定的自动化安全扫描会导致漏洞发现滞后。 | 当前机器无 `mvn`;未能生成完整依赖树;OSV 仅覆盖可解析直接依赖。 | 在 CI 中增加 `mvn test``mvn dependency:tree`、OSV Scanner 或 OWASP Dependency-Check;每次发版前输出依赖漏洞报告。 | P1,建议 2026-07-15 前完成 |
## 4. 公开漏洞核验结果
本次 OSV 查询命中以下依赖风险:
| 组件 | 当前版本 | 风险编号 | 等级 | 摘要 | 修复版本建议 |
| --- | --- | --- | --- | --- | --- |
| `com.fasterxml.jackson.core:jackson-core` | 2.18.3 | [GHSA-72hv-8253-57qq](https://osv.dev/vulnerability/GHSA-72hv-8253-57qq) | 中 | 异步解析器数字长度约束绕过,可能导致拒绝服务。 | 2.18.6 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-5jmj-h7xm-6q6v](https://osv.dev/vulnerability/GHSA-5jmj-h7xm-6q6v) | 中 | `@JsonIgnoreProperties` 大小写反序列化绕过。 | 2.18.9 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-hgj6-7826-r7m5](https://osv.dev/vulnerability/GHSA-hgj6-7826-r7m5) | 中 | `InetSocketAddress` 反序列化可能触发 DNS 解析,引入 SSRF 风险。 | 2.18.8 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-j3rv-43j4-c7qm](https://osv.dev/vulnerability/GHSA-j3rv-43j4-c7qm) | 高 | 多态类型校验绕过,可能导致任意类实例化。 | 2.18.8 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-rmj7-2vxq-3g9f](https://osv.dev/vulnerability/GHSA-rmj7-2vxq-3g9f) | 高 | `BasicPolymorphicTypeValidator` 数组子类型白名单绕过。 | 2.18.8 或更高兼容补丁版 |
| `com.microsoft.sqlserver:mssql-jdbc` | 12.8.1.jre11 | [GHSA-m494-w24q-6f7w](https://osv.dev/vulnerability/GHSA-m494-w24q-6f7w) / CVE-2025-59250 | 高 | SQL Server JDBC 驱动输入校验问题。 | 至少 12.8.2.jre11,或升级到 12.10.2.jre11 等兼容修复版本 |
依赖处置原则:
- 同一组件族统一版本,避免 `dependencyManagement` 与子模块显式版本不一致。
- 优先通过 Spring Boot BOM 或统一属性管理版本。
- 升级前备份当前依赖树;升级后执行单元测试、接口冒烟测试、文件预览/转换测试、登录鉴权测试。
- 对暂不能升级的漏洞记录风险接受原因、补偿控制和复核日期。
## 5. 已有安全控制与规避措施
| 控制项 | 当前证据 | 有效性说明 |
| --- | --- | --- |
| 默认拒绝未匹配请求 | `SecurityConfig``anyRequest().denyAll()` | 可降低非白名单路径暴露面。 |
| 接口级登录校验注解 | `@RequestCheck` 默认 `CheckLogin = true` | 业务层可对方法级别实施登录态、参数、日志控制。 |
| CORS 源白名单 | `CorsConfig` 中使用具体来源模式 | 避免使用 `*` 携带凭证;仍需生产环境收敛来源。 |
| CORS 方法限制 | 已允许常用方法并测试拒绝 TRACE | `SecurityRegressionTest` 覆盖异常方法拒绝。 |
| 响应头暴露收敛 | 暴露固定响应头,不使用 `*` | 已有测试验证不暴露所有响应头。 |
| 文件扩展名黑白名单 | `FileUtil` 中定义允许和禁止类型 | 可阻止常见脚本文件上传;仍需补充 MIME/魔数校验。 |
| 文件路径权限校验 | `FileUtil.checkFileAuthory` | 已有测试覆盖伪造根目录名绕过。 |
| Zip Slip 防护 | `ZipUtil.resolveZipEntryPath` | 解压路径规范化后校验目标目录边界。 |
| JWT 签名初始化 | `JwtHelp` 使用 RSA 签名并有静态初始化测试 | 已有测试覆盖 Spring 构造器未运行时的令牌生成。 |
| 资源治理配置 | 缓存、JS 缓存、线程池、动态连接池上限 | 已有回归测试覆盖容量限制和动态连接池关闭。 |
## 6. 风险处置方案与整改优先级
### P0:立即整改
整改目标:消除高危依赖、凭证泄露、未授权、SQL 注入、SSRF 和高危脚本执行面。
| 事项 | 责任建议 | 截止建议 | 验收标准 |
| --- | --- | --- | --- |
| 升级 Jackson 与 mssql-jdbc | 后端负责人 | 2026-07-01 | OSV/Dependency-Check 不再命中对应漏洞;回归测试通过。 |
| 移除明文数据库凭证 | 运维与后端负责人 | 2026-07-01 | POM、properties、日志和文档中无真实密码;已轮换暴露账号。 |
| 收敛 `permitAll` 与免登录接口 | 后端负责人 | 2026-07-05 | 白名单清单明确;高风险接口必须登录和鉴权;新增未授权访问测试。 |
| 动态 SQL 白名单治理 | 后端负责人 | 2026-07-05 | 用户输入值全部参数化;字段/表名/排序仅来自服务端白名单。 |
| 远程 URL 下载 SSRF 防护 | 后端负责人 | 2026-07-05 | 阻断内网、回环、链路本地、云元数据地址;新增 SSRF 单元测试。 |
| 关闭或限制 GraalJS 全访问 | 架构与后端负责人 | 2026-07-05 | 默认不允许 Java 全访问;脚本来源、对象访问和执行时间受控。 |
### P1:短期治理
整改目标:降低中危配置、解析、上传和命令执行风险。
| 事项 | 截止建议 | 验收标准 |
| --- | --- | --- |
| 生产 CORS 来源环境化和最小化 | 2026-07-10 | 生产仅保留正式域名;测试覆盖非法 Origin。 |
| CSRF 策略复核 | 2026-07-10 | Cookie 会话启用 CSRFBearer Token 场景明确禁止跨站自动携带凭证。 |
| XML 安全解析配置 | 2026-07-15 | 禁用 DTD、外部实体和外部 schema;新增 XXE 测试。 |
| 文件上传魔数、大小、目录策略 | 2026-07-15 | 上传目录不可执行;大小限制、MIME/魔数校验和审计日志上线。 |
| 系统命令调用白名单 | 2026-07-15 | 外部程序路径固定;参数数组化;无 shell 拼接;避免过宽文件权限。 |
| CI 安全扫描补齐 | 2026-07-15 | CI 生成测试报告、依赖树、漏洞扫描报告。 |
### P2:持续优化
整改目标:将安全自查固化为周期机制。
| 事项 | 截止建议 | 验收标准 |
| --- | --- | --- |
| 资源治理监控 | 2026-07-31 | 连接池、线程池、缓存、队列积压均有指标和告警。 |
| 安全基线文档 | 2026-07-31 | 形成接口鉴权、SQL、安全配置、上传下载、依赖升级基线。 |
| 安全回归用例扩展 | 2026-07-31 | 覆盖未授权、SQL 注入、SSRF、XXE、文件魔数、上传大小限制。 |
## 7. 定期漏洞自查机制建议
建议建立以下定期自查制度:
| 周期 | 自查内容 | 输出材料 |
| --- | --- | --- |
| 每周 | 依赖漏洞库增量扫描,关注高危/严重漏洞。 | 依赖漏洞扫描记录、风险接受记录。 |
| 每月 | 代码安全关键字扫描,复核认证、SQL、文件、脚本、XML、命令执行。 | 风险识别台账、整改闭环清单。 |
| 每次发版前 | `mvn test`、依赖树、OSV/Dependency-Check、关键接口安全回归。 | 发版安全检查表、测试报告。 |
| 每季度 | 安全基线复核、配置脱敏检查、凭证轮换、最小权限复核。 | 季度安全自查报告、凭证轮换记录。 |
| 重大漏洞公告后 | 针对公告组件和受影响版本快速排查。 | 专项漏洞排查记录、应急处置记录。 |
建议保留的自证材料:
- 自查日期、范围、负责人、扫描工具和命令记录。
- 依赖漏洞扫描原始结果和处置结论。
- 风险台账:风险编号、等级、影响、证据、责任人、计划完成日期、闭环状态。
- 整改前后代码或配置差异。
- 回归测试报告、构建报告、上线验证记录。
- 风险接受审批记录和下次复核日期。
## 8. 后续验证清单
| 检查项 | 命令或动作 | 预期结果 |
| --- | --- | --- |
| Maven 测试 | `mvn test` | 全部测试通过,无失败和错误。 |
| 依赖树 | `mvn dependency:tree` | 输出完整直接与传递依赖,归档为发版证据。 |
| OSV 扫描 | `osv-scanner -r .` 或 CI 中等效工具 | 无高危/严重未处置漏洞;中低危有处置计划。 |
| OWASP Dependency-Check | `dependency-check` Maven 插件或 CI 任务 | 生成 HTML/JSON 报告并归档。 |
| 敏感信息扫描 | secret 扫描工具或 `rg` 关键字扫描 | 无真实密码、Token、Secret、公网连接串。 |
| 安全回归 | 现有 JUnit + 新增未授权/SSRF/XXE/SQL 注入测试 | 关键安全用例稳定通过。 |
## 9. 本次自查结论
本次自查确认项目已具备一定安全治理基础,包括 Spring Security 默认拒绝策略、业务层登录校验注解、CORS 回归测试、文件路径校验、Zip Slip 防护、JWT 初始化测试和资源治理回归测试。
同时,本次自查识别出若干需要优先处置的风险:高危依赖版本、明文数据库凭证、接口开放面依赖业务层校验、动态 SQL 拼接、远程 URL 下载 SSRF 风险以及 GraalJS 全访问脚本执行风险。建议将 P0 风险纳入最近一次安全整改,完成后补跑 Maven 测试、依赖树、OSV/OWASP 扫描,并更新本报告形成闭环记录。