
suppression.xml
OWASP DependencyCheck 是一款用于检测项目依赖中已知安全漏洞的工具,而 suppression.xml 文件则用于管理扫描结果中的误报或无需立即处理的漏洞,确保最终报告更精准实用。suppression.xml 是一个抑制(或排除)文件,允许你明确告诉 DependencyCheck 忽略某些特定的漏洞警告。它的核心价值在于帮助我们精细化管理漏洞报告,减少干扰,聚焦在真正需要关注的安全问题上。
为什么需要 suppression.xml
需要 suppression.xml 文件主要出于以下原因:
管理误报:DependencyCheck 主要通过匹配 CPE(通用平台枚举)和 CVE(通用漏洞披露)来识别漏洞,但有时这种匹配可能不准确。例如,工具可能错误地将一个无害的组件识别为存在某个 CVE 漏洞的组件。
处理特殊状况:
- 某些漏洞可能不影响当前项目,例如漏洞仅存在于特定操作系统或项目未使用受影响的功能。
- 对于暂时无法修复的依赖项,例如依赖库尚未发布修复版本,或者升级会导致不兼容,可以先抑制相关警告并记录原因。
- 如果某个依赖项被错误地识别成了不相关的产品,也可以通过抑制文件来纠正。
如何使用 suppression.xml
指定抑制文件
你需要确保 DependencyCheck 知道抑制文件的位置。
Maven 配置示例:
在 pom.xml 中配置 DependencyCheck Maven 插件时,指定抑制文件路径:
org.owasp
dependency-check-maven
8.2.0
path/to/your/suppression.xml
之后运行 mvn verify 即可执行检查并应用抑制规则。
命令行方式:
使用 CLI 时,通过 --suppression 参数指定:
dependency-check.sh --project "MyProject" --scan "/path/to/scan" --suppression "/path/to/suppression.xml"
编写抑制规则
suppression.xml 文件的核心是定义抑制规则。DependencyCheck 支持基于多种属性进行匹配,以下是一些常见的用法和示例:
| 抑制条件 | 说明 | 示例 |
|---|---|---|
| CVE 编号 | 直接按CVE编号抑制。 | <suppress><cve>CVE-2021-37136</cve></suppress> |
| CPE 信息 | 抑制与特定CPE相关的所有漏洞。 | <suppress><cpe>cpe:/a:apache:struts:2.0.0</cpe></suppress> |
| 包URL | 使用Package URL精确标识组件,推荐。 | <suppress><packageUrl regex="true">^pkg:maven/org\.yaml/snakeyaml@.*$</packageUrl></suppress> |
| 文件哈希 | 通过SHA1等文件哈希匹配。 | <suppress><sha1>66734244CE86857018B023A8C56AE0635C56B6A1</sha1></suppress> |
| 临时抑制 | 使用until属性实现临时抑制。 | <suppress until="2025-12-31Z"><cve>CVE-2020-15824</cve></suppress> |
获取抑制代码片段
手动编写所有规则很麻烦,你可以利用 DependencyCheck 生成的 HTML 报告来快速获取抑制代码片段:
在 CI 构建产出的"工件"或"报告"目录中找到
dependency-check-report.html。在报告中找到要抑制的漏洞,通常旁边会有一个 "Suppress"按钮。
点击该按钮,会弹出一个对话框,里面就是为你生成好的 XML 代码片段,复制到
suppression.xml中即可。
使用技巧与最佳实践
为了更有效地使用 suppression.xml,这里有一些建议:
精准抑制:尽量使用更精确的匹配条件(如
packageUrl或cve),避免使用过于宽泛的条件(如仅用cpe)导致漏洞被意外抑制。说明抑制原因:在
<notes>标签中清晰记录为什么要抑制这个漏洞,例如:"该CVE仅影响Windows环境,本项目部署于Linux"。这能为后续审查提供宝贵上下文。设定抑制期限:对于暂时无法修复的漏洞,使用
until属性为抑制设置一个过期时间。这能确保团队在未来重新评估这些漏洞,防止"一劳永逸"的忽视。定期审查:切勿"设置并遗忘"。建议定期(如每季度)审查
suppression.xml文件,检查是否有已过期的抑制、已修复的依赖,或者可以移除的不必要抑制。
suppression.xml 抑制文件模板
给大家一个实用性很强的模版demo,示例如下:
h2-1.4.200.jar CVE-2021-42392 ^com\.example\.utils:internal-utils:.*$ jackson-databind-2.9.10.8.jar CVE-2020-25649 log4j-core-2.12.1.jar CVE-2021-44228 CVE-2018-12345
重要提醒
suppression.xml 是一个强大的工具,但绝不能用它来简单地掩盖所有安全问题,把它当作一种"眼不见心不烦"的手段是危险的。它的正确角色是一个精细化的管理过滤器,其使用必须辅以审慎的判断和文档记录。修复依赖项本身,永远是处理漏洞的首选方案。