OWASP 依赖项检查,如何使用抑制

Joh*_*pha 7 java security continuous-integration suppression owasp

我的 CI 构建在 OWASP 依赖项检查中失败。例如

[HIGH] CVE-2021-37136 - io.netty:netty-codec-4.1.66.Final
Run Code Online (Sandbox Code Playgroud)

我知道我可以添加抑制来owaspDependencyCheckSuppressions.xml解决这个问题。

这是我以前没有做过的事情,但这里有一个指南 - https://jeremylong.github.io/DependencyCheck/general/suppression.html 上面写着......

“使用 HTML 报告抑制这些误报相当容易。在报告中,每个已识别的 CPE 旁边(以及 CVE 条目上)都有一个抑制按钮。单击抑制按钮将创建一个对话框,您可以简单地按 Control-C复制要放入抑制 XML 文件中的 XML”

我有 2 个问题

#1 你知道我在哪里可以找到这份 HTML 报告吗?我认为它可能在 CI 中链接(我正在使用 Circle CI),但我在那里找不到它:(

#2 指南中给出了抑制示例

<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
   <suppress>
      <notes><![CDATA[
      file name: some.jar
      ]]></notes>
      <sha1>66734244CE86857018B023A8C56AE0635C56B6A1</sha1>
      <cpe>cpe:/a:apache:struts:2.0.0</cpe>
   </suppress>
</suppressions>
Run Code Online (Sandbox Code Playgroud)

指南接着说

“上面的 XML 文件将抑制任何具有匹配 SHA1 哈希值的文件中的 cpe:/a:apache:struts:2.0.0。”

“任何文件”是什么意思?这是否意味着任何使用依赖关系的 Java 类?

谢谢 :)

San*_*ani 4

以下答案基于 gradle OWASP 插件版本 7.4.4。

下面在我的 build.gradle 中

id "org.owasp.dependencycheck" version "7.4.4"
Run Code Online (Sandbox Code Playgroud)

下面是任务配置

dependencyCheck {
    formats = ['xml','json']
    failBuildOnCVSS = 8
    failOnError = true
    suppressionFile = 'config/dependency-check/suppressions.xml'
    check.dependsOn(dependencyCheckAnalyze)
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们提供了抑制文件的路径,我们可以在其中定义漏洞的抑制。

所以,就我而言,我们的声纳构建失败是由于

Filename: spring-security-oauth2-client-5.6.3.jar | Reference: CVE-2022-22978 | CVSS Score: 9.8

Filename: snakeyaml-1.33.jar | Reference: CVE-2022-1471 | CVSS Score: 9.8
Run Code Online (Sandbox Code Playgroud)

因此,我已将它们添加到 Suppression.xml 中,我的文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
    <suppress until="2023-06-01Z">
        <notes><![CDATA[
        This suppresses a CVE from SnakeYaml as it needs to wait until SpringBoot 3 upgrade
        ]]></notes>
        <packageUrl regex="true">^pkg:maven/org\.yaml/snakeyaml@.*$</packageUrl>
        <vulnerabilityName>CVE-2022-1471</vulnerabilityName>
    </suppress>
    <suppress until="2023-06-01Z">
        <notes><![CDATA[
        This suppresses a CVE from OAuth Client as it needs to wait until SpringBoot 3 upgrade
        ]]></notes>
        <packageUrl regex="true">^pkg:maven/org\.springframework\.security/spring\-security\-oauth2\-client@.*$</packageUrl>
        <vulnerabilityName>CVE-2022-22978</vulnerabilityName>
    </suppress>
</suppressions>
Run Code Online (Sandbox Code Playgroud)

我建议使用,until="2023-06-01Z"这样你就不会永远压制它们。

可以通过多种不同的组合来抑制漏洞。因此,请参考https://jeremylong.github.io/DependencyCheck/general/suppression.html并决定哪个选项适合您的要求。