27 lines
19 KiB
Plaintext
27 lines
19 KiB
Plaintext
<!DOCTYPE html>
|
||
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>WebErp ????????????</title>
|
||
<style>
|
||
@page Section1 { size: 29.7cm 21cm; margin: 1.35cm 1.35cm 1.35cm 1.35cm; mso-page-orientation: landscape; }
|
||
div.Section1 { page: Section1; }
|
||
body { font-family: "Microsoft YaHei", Arial, sans-serif; color: #1F2937; font-size: 10pt; line-height: 1.18; }
|
||
h1 { text-align: center; color: #1F4D78; font-size: 20pt; margin: 0 0 14pt 0; }
|
||
h2 { color: #2E74B5; font-size: 14pt; margin: 16pt 0 7pt 0; }
|
||
h3 { color: #1F4D78; font-size: 12pt; margin: 12pt 0 6pt 0; }
|
||
p { margin: 0 0 6pt 0; }
|
||
ul { margin: 0 0 5pt 22pt; }
|
||
li { margin-bottom: 3pt; }
|
||
code { font-family: Consolas, monospace; color: #7A3E00; }
|
||
table { width: 100%; border-collapse: collapse; margin: 6pt 0 10pt 0; table-layout: fixed; }
|
||
th { background: #E8EEF5; color: #1F4D78; font-weight: bold; text-align: center; }
|
||
td, th { border: 1px solid #B8C7D9; padding: 5px 6px; vertical-align: middle; word-wrap: break-word; }
|
||
tr:nth-child(even) td { background: #F6F8FA; }
|
||
a { color: #2E74B5; }
|
||
</style>
|
||
</head>
|
||
<body><div class="Section1">
|
||
<h1>WebErp 安全漏洞自查工作自证材料</h1><p>报告日期:2026-06-25</p><p>报告类型:企业安全漏洞定期自查与风险规避自证材料</p><p>适用范围:WebErp / weberp Spring Boot 后端项目</p><p>报告口径:对外自证,展示已开展的安全自查、已建设的风险规避措施、风险识别记录与后续处置安排。</p><h2>1. 项目概况与扫描范围</h2><p>本次自查对象为 WebErp 后端工程,核心模块为 <code>WebErp/weberp</code>。项目采用 Spring Boot、Maven、多数据库驱动、MyBatis、文件处理、Office 文档转换、远程资源下载、JWT 登录态、GraalJS 表达式执行等能力。</p><p>本次自查覆盖以下范围:</p><table><tr><th>类别</th><th>覆盖内容</th><th>证据来源</th></tr><tr><td>依赖与构建</td><td>Maven 父子 POM、依赖树、关键第三方组件版本</td><td><code>WebErp/pom.xml</code>、<code>WebErp/weberp/pom.xml</code>、<code>weberp/target/dependency-tree.txt</code></td></tr><tr><td>配置安全</td><td>数据库连接、运行配置、跨域配置、脚本执行开关</td><td><code>application.properties</code>、<code>CorsConfig.java</code>、<code>JsEngine.java</code></td></tr><tr><td>认证授权</td><td>Spring Security 入口放行、业务层登录校验、公开接口白名单</td><td><code>SecurityConfig.java</code>、<code>BaseHandler.java</code>、<code>PublicApiRegistry.java</code></td></tr><tr><td>SQL 安全</td><td>MyBatis 动态 SQL、SQL 片段校验、字段名白名单</td><td><code>mapper/*.xml</code>、<code>SqlSafetyGuard.java</code>、SQL Provider 实现</td></tr><tr><td>文件与下载</td><td>文件路径校验、压缩包解压、远程下载、在线预览</td><td><code>FileUtil.java</code>、<code>ZipUtil.java</code>、<code>RemoteDownloadGuard.java</code>、<code>ToolsHandler.java</code></td></tr><tr><td>脚本与命令</td><td>GraalJS 沙箱配置、系统命令执行点复核</td><td><code>JsEngine.java</code>、<code>OfficeUtil.java</code>、<code>FormatFactoryUtil.java</code></td></tr><tr><td>自动化证据</td><td>安全回归测试、依赖树生成、工具可用性确认</td><td><code>SecurityRegressionTest.java</code>、Maven 命令执行记录</td></tr></table><p>说明:本报告为安全漏洞自查工作留档材料,不等同于第三方渗透测试报告或等保测评报告。</p><h2>2. 自查方法与证据来源</h2><p>本次自查采用静态代码扫描、配置审阅、依赖版本核验、关键安全控制点测试和公开漏洞库查询相结合的方式。</p><p>已执行并形成证据的检查项:</p><table><tr><th>检查项</th><th>方法</th><th>结果</th></tr><tr><td>安全回归测试</td><td>执行 <code>mvn -q -Dtest=SecurityRegressionTest test</code></td><td>通过,覆盖路径越权、Zip Slip、CORS、远程下载限制、SQL 片段校验、公开接口白名单等场景</td></tr><tr><td>Maven 依赖树</td><td>执行 Maven dependency tree 并输出到 <code>weberp/target/dependency-tree.txt</code></td><td>已生成,可用于依赖版本留档</td></tr><tr><td>OSV 漏洞查询</td><td>对关键 Maven 组件进行 OSV API 查询</td><td>发现 Jackson databind 仍有一项新披露风险需跟踪</td></tr><tr><td>工具环境确认</td><td>检查本机 <code>osv-scanner</code> 与 <code>dependency-check</code> 命令</td><td>当前环境未安装,已列入后续工具化改进</td></tr><tr><td>敏感配置审阅</td><td>扫描配置文件与安全相关关键字</td><td>发现数据库连接配置仍需脱敏入库治理,报告正文已脱敏展示</td></tr></table><h2>3. 风险识别记录台账</h2><table><tr><th>编号</th><th>风险名称</th><th>位置</th><th>等级</th><th>影响</th><th>现状证据</th><th>已有控制</th><th>处置方案</th><th>优先级</th></tr><tr><td>R-001</td><td>第三方依赖漏洞风险</td><td><code>com.fasterxml.jackson.core:jackson-databind:2.18.8</code></td><td>高</td><td>特定反序列化忽略属性绕过场景下,可能影响对象字段保护策略</td><td>OSV 查询命中 <code>GHSA-5jmj-h7xm-6q6v</code>;OSV 标注修复版本为 <code>2.18.9</code>,但当前 Maven Central 未查询到该版本,本地 Maven 解析也失败</td><td>Jackson 已从旧版本升级到当前可打包版本;父 POM 已统一版本管理,避免父子 POM 版本漂移</td><td>持续跟踪可用修复版本;若 <code>2.18.9</code> 可解析则优先小版本升级;若不可用,则评估升级到后续可用安全版本并补跑兼容测试</td><td>P0</td></tr><tr><td>R-002</td><td>配置文件中存在真实数据库连接信息</td><td><code>weberp/src/main/resources/application.properties</code> 第 12 行附近</td><td>高</td><td>若配置文件被外发或提交到共享仓库,可能导致数据库访问凭证泄露</td><td>配置文件中仍有真实数据库连接串;本报告仅记录脱敏形态:<code>jdbc:dm://*<strong>:</strong><strong>/</strong><strong>?凭证=</strong>*</code></td><td>已约定生产真实配置应放在部署服务器本地;报告中不展示真实地址、账号或密码</td><td>立即轮换已暴露凭证;将仓库配置改为示例值;补充 <code>.gitignore</code> 排除本地与生产真实配置文件;对历史提交和制品进行泄露排查</td><td>P0</td></tr><tr><td>R-003</td><td>动态接口入口开放面较大</td><td><code>SecurityConfig.java</code>、<code>BaseHandler.java</code>、<code>PublicApiRegistry.java</code></td><td>中</td><td>若业务层校验缺失,可能导致未授权访问</td><td>Spring Security 对动态 <code>/Api/**</code> 分发入口放行;业务层通过 <code>@RequestCheck</code> 和公开接口白名单进行控制</td><td><code>BaseHandler</code> 已引入 <code>PublicApiRegistry</code>,未列入白名单的 <code>CheckLogin=false</code> 方法会回落为需要登录;未匹配请求默认拒绝</td><td>持续审计所有 <code>CheckLogin=false</code> 方法;新增公开接口必须进入白名单并经过安全复核;对模块数据、文件预览、下载接口默认保持登录态要求</td><td>P0</td></tr><tr><td>R-004</td><td>MyBatis 动态 SQL 拼接风险</td><td><code>mapper/*.xml</code> 中 <code>${...}</code> 片段及 SQL Provider</td><td>高</td><td>若外部输入直接进入 SQL 片段,可能造成 SQL 注入或越权查询</td><td>Mapper 文件中仍存在字段名、条件片段和完整 SQL 拼接点</td><td>已新增 <code>SqlSafetyGuard</code>;部分入口已对字段名、只读查询和条件片段进行白名单或危险关键字拦截</td><td>对所有 <code>${...}</code> 来源建立清单;字段名改为服务端白名单;条件片段逐步参数化;无法立即改造的入口必须先接入 <code>SqlSafetyGuard</code></td><td>P0</td></tr><tr><td>R-005</td><td>远程 URL 下载与服务端请求风险</td><td><code>FileUtil.java</code>、<code>ToolsHandler.java</code>、<code>WebUtil.java</code>、<code>CreateWordUtil.java</code>、<code>DateTimeUtil.java</code></td><td>高</td><td>若允许用户控制 URL,可能触发 SSRF、内网探测或下载超限</td><td><code>RemoteDownloadGuard</code> 已接入部分下载流程;仍存在多个 URL 请求入口需要继续统一治理</td><td><code>RemoteDownloadGuard</code> 限制协议、私有地址、链路本地地址、组播地址、重定向跳数和下载大小;配置项默认禁止私有地址</td><td>将残留 URL 请求入口统一接入远程下载守卫;重定向每跳复核;对在线预览类接口补充域名白名单或登录态要求</td><td>P0</td></tr><tr><td>R-006</td><td>文件路径穿越与压缩包解压风险</td><td><code>FileUtil.java</code>、<code>ZipUtil.java</code></td><td>中</td><td>文件读写或解压过程若未限制根目录,可能覆盖非授权路径</td><td>已有路径规范化、根目录匹配和压缩条目路径校验;回归测试覆盖路径越权和 Zip Slip</td><td><code>ZipUtil</code> 对解压目标路径进行标准化并校验必须位于目标目录内;<code>FileUtil</code> 对文件虚拟路径和物理路径做规范化处理</td><td>持续保留回归测试;新增文件读写入口必须复用路径校验;压缩包处理增加大小和条目数量限制作为后续优化</td><td>P1</td></tr><tr><td>R-007</td><td>GraalJS 脚本全访问风险</td><td><code>JsEngine.java</code>、<code>application.properties</code></td><td>中</td><td>若脚本全访问开启,表达式可能访问宿主环境能力</td><td><code>app.js.allow-all-access=false</code> 已配置;代码中仅在显式开启时允许全访问并输出告警</td><td>默认关闭 GraalJS 全访问;表达式执行使用独立上下文和缓存容量限制</td><td>保持默认关闭;若业务确需开启,必须形成变更审批、日志告警和最小权限说明;补充脚本危险语句测试</td><td>P1</td></tr><tr><td>R-008</td><td>系统命令执行点需持续复核</td><td><code>OfficeUtil.java</code>、<code>FormatFactoryUtil.java</code></td><td>中</td><td>若命令路径或参数可被外部输入污染,可能造成命令执行风险</td><td>代码中存在系统命令调用点,主要用于文件权限和格式转换</td><td>已将该类入口列为重点复核项;目前未在本报告中确认存在可利用外部输入链</td><td>对可执行文件路径、参数来源和工作目录进行白名单校验;禁止拼接 shell 字符串;记录命令执行审计日志</td><td>P1</td></tr><tr><td>R-009</td><td>CORS 白名单与响应头暴露需环境化治理</td><td><code>CorsConfig.java</code></td><td>中</td><td>若跨域源配置过宽,可能扩大凭证跨域风险</td><td>CORS 已采用白名单并允许携带凭证;测试覆盖不暴露全部响应头和拒绝异常方法</td><td>未使用通配源;限制请求方法;仅暴露必要响应头</td><td>将不同环境的允许源迁移到配置项;生产环境定期审计白名单;下线临时调试源</td><td>P1</td></tr><tr><td>R-010</td><td>安全扫描工具链不完整</td><td>本机工具环境</td><td>低</td><td>无法在本机直接运行标准化 OSV Scanner 或 OWASP Dependency-Check</td><td>当前命令行未安装 <code>osv-scanner</code> 与 <code>dependency-check</code></td><td>已通过 OSV API 和 Maven 依赖树进行替代性核验</td><td>在 CI 或发布机补齐依赖漏洞扫描工具;形成扫描报告归档;对高危漏洞建立阻断规则</td><td>P2</td></tr><tr><td>R-011</td><td>SQL 控制台日志与敏感信息日志风险</td><td><code>application.properties</code>、SQL 调试配置</td><td>中</td><td>开启 SQL 输出时,可能在日志中暴露业务字段、查询条件或敏感参数</td><td>配置中存在 MyBatis 控制台日志相关项,当前仍需按环境复核</td><td>部分日志级别已关闭;安全回归测试覆盖部分响应头与令牌场景</td><td>生产环境关闭 SQL 明文输出;日志脱敏账号、手机号、凭证和令牌;建立日志留存与访问控制</td><td>P1</td></tr></table><h2>4. 已有安全控制与风险规避措施</h2><table><tr><th>控制领域</th><th>已有措施</th><th>自证说明</th></tr><tr><td>依赖治理</td><td>Maven 父 POM 统一管理关键组件版本;子模块保留真实业务依赖</td><td>降低父子 POM 版本漂移和重复依赖风险,便于后续集中升级</td></tr><tr><td>默认拒绝</td><td>Spring Security 未匹配请求使用默认拒绝策略</td><td>减少非预期接口暴露</td></tr><tr><td>公开接口收敛</td><td><code>PublicApiRegistry</code> 集中维护公开方法</td><td>登录、验证码、基础系统信息等接口可公开;模块业务数据类接口默认需登录</td></tr><tr><td>登录态校验</td><td><code>BaseHandler</code> 基于 <code>@RequestCheck</code> 统一执行登录和参数校验</td><td>对动态分发 API 提供统一拦截层</td></tr><tr><td>SQL 防护</td><td><code>SqlSafetyGuard</code> 提供字段名、只读查询和条件片段校验</td><td>对高风险动态 SQL 入口先建立拦截,再逐步参数化</td></tr><tr><td>SSRF 防护</td><td><code>RemoteDownloadGuard</code> 限制协议、地址类型、重定向和下载大小</td><td>对远程下载流程建立边界控制</td></tr><tr><td>文件路径防护</td><td>文件路径规范化、根目录校验、压缩包条目路径校验</td><td>防止路径穿越和 Zip Slip</td></tr><tr><td>CORS 控制</td><td>采用具体源白名单,未使用任意源通配</td><td>携带凭证场景下减少跨域滥用风险</td></tr><tr><td>JS 沙箱</td><td>GraalJS 全访问默认关闭</td><td>降低表达式执行访问宿主能力的风险</td></tr><tr><td>回归测试</td><td><code>SecurityRegressionTest</code> 覆盖多项安全控制</td><td>形成可重复验证证据</td></tr></table><h2>5. 风险处置方案与整改优先级</h2><table><tr><th>优先级</th><th>处置事项</th><th>目标完成标准</th></tr><tr><td>P0</td><td>轮换并移除已提交配置中的真实数据库凭证</td><td>仓库配置仅保留示例值;真实配置仅存在于部署服务器本地;历史暴露凭证完成轮换</td></tr><tr><td>P0</td><td>跟踪 Jackson databind 修复版本</td><td>修复版本可解析后完成升级、打包和安全回归测试;若采用后续可用安全版本,完成兼容验证</td></tr><tr><td>P0</td><td>动态 SQL 治理</td><td>所有 <code>${...}</code> 来源登记;外部输入不得直接进入 SQL 片段;关键路径完成白名单或参数化</td></tr><tr><td>P0</td><td>远程 URL 请求统一防护</td><td>所有用户可控 URL 请求入口接入 <code>RemoteDownloadGuard</code> 或域名白名单;重定向每跳校验</td></tr><tr><td>P0</td><td>公开接口白名单治理</td><td><code>CheckLogin=false</code> 方法均有业务必要性说明;未列入公开白名单的接口必须要求登录</td></tr><tr><td>P1</td><td>CORS 与日志生产化治理</td><td>CORS 源按环境配置;生产关闭 SQL 明文输出;日志中敏感字段完成脱敏</td></tr><tr><td>P1</td><td>命令执行点复核</td><td>可执行文件路径与参数来源白名单化;禁止 shell 字符串拼接;补充审计日志</td></tr><tr><td>P2</td><td>安全扫描工具链补齐</td><td>CI 或发布流程中加入 OSV Scanner 或 OWASP Dependency-Check,并归档扫描结果</td></tr></table><h2>6. 定期漏洞自查机制</h2><p>建议建立以下周期化机制,并将结果作为企业安全漏洞自查自证材料留档:</p><table><tr><th>周期</th><th>自查动作</th><th>输出材料</th></tr><tr><td>每月</td><td>依赖漏洞扫描、Maven 依赖树归档、关键漏洞公告复核</td><td>依赖漏洞扫描记录、风险处置台账</td></tr><tr><td>每季度</td><td>代码安全自查,重点检查鉴权、SQL、文件、远程请求、脚本执行、日志脱敏</td><td>季度安全自查报告、整改跟踪表</td></tr><tr><td>每次发版前</td><td>执行安全回归测试、检查配置是否含真实凭证、复核新增公开接口</td><td>发版安全检查清单、测试结果截图或日志</td></tr><tr><td>重大漏洞公告后</td><td>针对影响组件进行应急排查、临时规避、升级验证</td><td>应急响应记录、修复验证记录</td></tr><tr><td>配置变更时</td><td>复核数据库、Redis、短信、推送、跨域源等配置</td><td>配置变更审批与脱敏检查记录</td></tr></table><p>建议固定归档材料:</p><ul><li>Maven 依赖树与关键依赖版本清单。</li></ul><ul><li>OSV Scanner 或 OWASP Dependency-Check 报告。</li></ul><ul><li>安全回归测试结果。</li></ul><ul><li>风险识别记录与处置状态表。</li></ul><ul><li>配置脱敏检查记录。</li></ul><ul><li>公开接口白名单审计记录。</li></ul><h2>7. 附件证据清单</h2><table><tr><th>证据项</th><th>文件或命令</th><th>说明</th></tr><tr><td>安全回归测试</td><td><code>mvn -q -Dtest=SecurityRegressionTest test</code></td><td>已通过,覆盖路径、压缩包、CORS、远程下载、SQL 与公开接口控制</td></tr><tr><td>依赖树</td><td><code>weberp/target/dependency-tree.txt</code></td><td>已生成,用于记录当前第三方组件版本</td></tr><tr><td>依赖漏洞来源</td><td><a href="https://osv.dev/vulnerability/GHSA-5jmj-h7xm-6q6v">OSV GHSA-5jmj-h7xm-6q6v</a></td><td>Jackson databind 新披露风险来源</td></tr><tr><td>鉴权控制</td><td><code>SecurityConfig.java</code>、<code>BaseHandler.java</code>、<code>PublicApiRegistry.java</code></td><td>入口放行、业务层校验与公开接口白名单</td></tr><tr><td>SQL 控制</td><td><code>SqlSafetyGuard.java</code>、<code>mapper/*.xml</code></td><td>动态 SQL 风险识别与部分防护落点</td></tr><tr><td>下载控制</td><td><code>RemoteDownloadGuard.java</code>、<code>FileUtil.java</code></td><td>远程下载协议、地址、重定向和大小控制</td></tr><tr><td>文件控制</td><td><code>FileUtil.java</code>、<code>ZipUtil.java</code></td><td>路径规范化、根目录校验和 Zip Slip 防护</td></tr><tr><td>脚本控制</td><td><code>JsEngine.java</code>、<code>application.properties</code></td><td>GraalJS 全访问默认关闭</td></tr><tr><td>工具环境限制</td><td><code>osv-scanner --version</code>、<code>dependency-check --version</code></td><td>当前本机未安装,建议在 CI 或发布机补齐</td></tr></table><h2>8. 结论</h2><p>本项目已开展面向依赖、配置、认证授权、SQL、文件处理、远程下载、脚本执行、跨域和回归测试的安全漏洞自查工作,并已具备多项风险规避措施。当前风险主要集中在配置凭证治理、Jackson 新披露漏洞跟踪、动态 SQL 全量收敛、残留远程 URL 请求统一防护和生产环境安全配置固化。</p><p>上述事项已纳入整改跟踪台账。后续通过定期扫描、发版前安全检查、重大漏洞应急复核和自动化安全回归测试,持续证明企业具备安全漏洞风险识别、处置和规避能力。</p>
|
||
</div></body></html>
|