查看流水线中的漏洞

要查看流水线中的漏洞:

  1. 在顶部栏上,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏中,选择 CI/CD > 流水线
  3. 从列表中,选择您要查看漏洞的流水线。
  4. 选择 安全 选项卡。

流水线由多个作业组成,其中可能包括安全扫描。当作业使用 artifacts:reports 声明并生成安全扫描报告时,系统会解析并抓取这些报告的内容,创建与流水线所属项目相关的漏洞。

如果作业未能完成,流水线漏洞报告不会显示此作业检测到的漏洞发现。 例如,流水线包含 DAST 和 SAST 作业,但 DAST 作业因返回非零退出代码而失败,则报告不会显示 DAST 结果。

流水线漏洞报告仅显示安全报告产物中包含的结果。该报告不同于包含所有成功作业的累积结果的漏洞报告,也不同于合并请求安全部件,它将分支结果与累积结果相结合。

在系统显示结果之前,所有流水线报告中的漏洞发现都是经过重复消除的

扫描详情

扫描详情显示流水线中的漏洞发现摘要和源报告。

系统为流水线中存在的每个扫描类型产物显示一行信息。

请注意,每种扫描类型的漏洞总数都包括被忽略的发现。如果报告中的结果数量与扫描详情中的数量不匹配,请确保禁用隐藏忽略

下载安全扫描输出

  • 引入于 13.10 版本。
  • 优化于 14.2 版本。

根据安全扫描程序的类型,您可以下载:

  • 包含安全扫描器报告的 JSON 产物。
  • 包含安全扫描器扫描的 URL 和端点的 CSV 文件。

要下载安全扫描输出:

  1. 扫描详情 中,选择 下载结果
    • 要下载 JSON 文件,请选择 JSON 产物。
    • 要下载 CSV 文件,请选择 下载扫描的资源

扫描结果

系统显示了所有安全报告产物的组合结果列表。过滤器的工作方式类似于漏洞报告过滤器,但仅限于严重性工具,另外添加了隐藏已忽略项切换。

当您查看流水线报告的漏洞发现时,您可以选择一个或多个条目进行忽略,类似于漏洞报告中的忽略漏洞

当您将流水线对应的分支合并到默认分支中时,所有报告的发现都会合并到漏洞报告中。流水线完成后,将合并在默认分支上执行的流水线中的扫描结果。

现有漏洞状态 在流水线中被忽略? 新的漏洞状态
any Yes Dismissed
Dismissed any Dismissed
Confirmed No Confirmed
Needs triage (Detected) No Needs triage (Detected)
Resolved No Needs triage (Detected)
N/A (i.e.: new vulnerability) No Needs triage (Detected)

重复数据删除过程

当流水线包含生成多个相同类型的安全报告的作业时,多个报告中可能存在相同的漏洞发现。当使用不同的扫描器来增加覆盖范围时,这种重复很常见,但也可以存在于单个报告中。重复数据删除过程允许您最大化漏洞扫描覆盖率,同时减少您需要管理的结果数量。 当一个发现的扫描类型位置和标识符是一样时,将被认为与另一个发现重复。

扫描类型必须匹配,因为每个扫描类型都可以有自己的漏洞位置定义。例如,静态分析器能够定位文件路径和行号,而容器扫描分析器则使用镜像名称。

在比较标识符时,消停在重复数据删除期间不会比较 CWEWASC,因为它们是“类型标识符”,用于对漏洞组进行分类。包含这些标识符会导致许多发现被错误地视为重复。如果两个发现的标识符都不匹配,则认为它们是唯一的。

在一组重复的发现中,第一次出现的发现被保留,其余的被跳过。安全报告按文件路径的字母顺序处理,发现按它们在报告中出现的顺序依次处理。

重复数据删除示例

  • 示例 1:标识符和位置匹配,扫描类型不匹配。
    • 发现
      • 扫描类型:sast
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510
    • 其他发现
      • 扫描类型:secret_detection
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510
    • 去重结果:不重复,因为扫描类型不同。
  • 示例 2:位置和扫描类型匹配,类型标识符不匹配。
    • 发现
      • 扫描类型:sast
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CWE-259
    • 其他发现
      • 扫描类型:sast
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CWE-798
    • 去重结果:重复,因为 CWE 标识符被忽略。
  • 示例 3:扫描类型、位置和一个标识符均匹配。
    • 发现
      • 扫描类型:container_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符: CVE-2019-12345、CVE-2022-25510、CWE-259
    • 其他发现
      • 扫描类型:container_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510, CWE-798
    • 去重结果:重复,因为所有条件都匹配,并且类型标识符被忽略。只有一个标识符需要匹配,在本例中为 CVE-2022-25510。

上面的示例不包括原始位置值。每种扫描类型都定义了自己的 fingerprint_data,用于生成用作 location_fingerprintSHA1 哈希。 您可以 gitlab/lib/gitlab/ci/reports/security/locationsgitlab/ee/lib/gitlab/ci/reports/security/locations 中,找到每种扫描类型的定义。