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

19 KiB
Raw Blame History

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

报告日期: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.xmlWebErp/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.xmlWebErp/weberp/pom.xml 中 Jackson 2.18.3 可能导致反序列化绕过、SSRF、拒绝服务等风险,取决于业务是否启用相关 Jackson 特性和输入面。 OSV 命中 jackson-corejackson-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.xmlWebErp/weberp/pom.xmlmssql-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.xmlmapper/DMCrmMapper.xmlmapper/CustomerMapper.xml ${} 会直接拼接 SQL 文本,若字段名、条件、排序或 SQL 片段来自用户输入,可能导致 SQL 注入。 扫描发现 ${sql}${keyName}${condition} 等动态拼接;部分业务代码也存在大量 String.format / 拼接式 SQL。 将值参数改为 #{};对表名、字段名、排序、条件片段使用服务端白名单枚举;禁止前端直接传 SQL;对无法立即改造的动态 SQL 增加 SqlAnalyzer 校验和审计日志。 P0,建议 2026-07-05 前完成
R-008 远程 URL 下载文件可能形成 SSRF FileUploadController.javaFileUtil.DownLoadFiledownloadFileasyncDownload 若用户可控 URL 被服务端下载,可能访问内网、云元数据地址或敏感管理端口。 文件上传逻辑支持 url 参数触发远程下载,工具类包含多处 HTTP 下载方法。 增加 URL 协议、域名、IP 网段、端口白名单;阻断内网地址、回环地址、链路本地地址、云元数据地址;限制重定向和文件大小;记录下载审计日志。 P0,建议 2026-07-05 前完成
R-009 文件上传类型与路径风险需持续治理 FileUtil.javaFileUploadController.java 文件类型、文件名、路径校验缺陷可能导致任意文件写入、恶意文件上传或越权读取。 已存在扩展名白名单、危险类型黑名单、路径权限校验;测试覆盖伪造根目录名绕过场景。 保持服务端真实路径归一化校验;增加 MIME/文件魔数校验;上传目录禁止脚本执行;限制单文件大小和总量;对下载、删除、移动操作统一权限校验。 P1,建议 2026-07-15 前完成
R-010 Zip Slip 解压路径穿越风险已识别并有控制 ZipUtil.javaSecurityRegressionTest.java 恶意压缩包可能通过 ../ 写出目标目录,覆盖系统文件。 ZipUtil 使用目标根路径 normalize 后校验 startsWith(targetRoot);测试覆盖 ../escaped.txt 解压逃逸。 保留现有校验;补充压缩包大小、条目数、单文件大小、解压后总大小限制,防止 Zip Bomb。 P1,建议 2026-07-15 前完成
R-011 GraalJS 允许全访问,动态脚本执行面较高 JsEngine.java:39-40JsEngine.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.javaFormatFactoryUtil.java 外部程序路径或参数若可控,可能形成命令执行、权限扩大或路径劫持风险。 扫描发现 Runtime.getRuntime().execProcessBuilder 用于文件权限或格式转换。 固定可执行文件路径;参数使用数组传递且禁止拼接 shell;校验文件路径位于工作目录;记录执行日志和失败告警;避免 chmod 777 等过宽权限。 P1,建议 2026-07-15 前完成
R-014 资源治理已有控制但需纳入定期复核 ResourceGovernanceConfig.javaRequestCleanupFilter.javaResourceGovernanceRegressionTest.java 缓存、线程池、动态数据源若失控,可能导致内存泄漏、连接泄漏或拒绝服务。 已有缓存容量、JS 缓存容量、线程池队列、动态连接池关闭等配置和回归测试。 保留容量上限;接入运行监控;对连接池活跃数、队列积压、缓存命中率和异常关闭建立告警。 P2,建议 2026-07-31 前完成
R-015 构建与依赖治理流程不完整 当前环境与 POM 缺少稳定的自动化安全扫描会导致漏洞发现滞后。 当前机器无 mvn;未能生成完整依赖树;OSV 仅覆盖可解析直接依赖。 在 CI 中增加 mvn testmvn 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 异步解析器数字长度约束绕过,可能导致拒绝服务。 2.18.6 或更高兼容补丁版
com.fasterxml.jackson.core:jackson-databind 2.18.3 GHSA-5jmj-h7xm-6q6v @JsonIgnoreProperties 大小写反序列化绕过。 2.18.9 或更高兼容补丁版
com.fasterxml.jackson.core:jackson-databind 2.18.3 GHSA-hgj6-7826-r7m5 InetSocketAddress 反序列化可能触发 DNS 解析,引入 SSRF 风险。 2.18.8 或更高兼容补丁版
com.fasterxml.jackson.core:jackson-databind 2.18.3 GHSA-j3rv-43j4-c7qm 多态类型校验绕过,可能导致任意类实例化。 2.18.8 或更高兼容补丁版
com.fasterxml.jackson.core:jackson-databind 2.18.3 GHSA-rmj7-2vxq-3g9f BasicPolymorphicTypeValidator 数组子类型白名单绕过。 2.18.8 或更高兼容补丁版
com.microsoft.sqlserver:mssql-jdbc 12.8.1.jre11 GHSA-m494-w24q-6f7w / CVE-2025-59250 SQL Server JDBC 驱动输入校验问题。 至少 12.8.2.jre11,或升级到 12.10.2.jre11 等兼容修复版本

依赖处置原则:

  • 同一组件族统一版本,避免 dependencyManagement 与子模块显式版本不一致。
  • 优先通过 Spring Boot BOM 或统一属性管理版本。
  • 升级前备份当前依赖树;升级后执行单元测试、接口冒烟测试、文件预览/转换测试、登录鉴权测试。
  • 对暂不能升级的漏洞记录风险接受原因、补偿控制和复核日期。

5. 已有安全控制与规避措施

控制项 当前证据 有效性说明
默认拒绝未匹配请求 SecurityConfiganyRequest().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 扫描,并更新本报告形成闭环记录。