19 KiB
19 KiB
安全漏洞自查工作自证材料
报告日期: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 | 中 | 异步解析器数字长度约束绕过,可能导致拒绝服务。 | 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. 已有安全控制与规避措施
| 控制项 | 当前证据 | 有效性说明 |
|---|---|---|
| 默认拒绝未匹配请求 | 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 会话启用 CSRF;Bearer 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 扫描,并更新本报告形成闭环记录。