查看流水线中的漏洞 (ULTIMAT ALL)

所有启用的安全分析器都会在流水线中运行并且将结果输出为产物。这些产物是可以被处理的,包括复制,而且结果会列举在流水线的 安全 选项卡中。通过在流水线中识别漏洞发现,您可以更准确的来识别风险。

如果标准会应用到流水线选项卡中:

  • 只显示成功安全扫描作业的结果。比如,如果流水线中包含 SAST 和 DAST 作业,但 DAST 作业失败,则只显示 SAST 结果。
  • 漏洞发现有保留期。过期的发现不会显示在流水线安全选项卡中。详情请参阅 保留期

在流水线中查看漏洞

要在流水线中查看漏洞:

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择流水线。
  4. 选择 安全 选项卡。

扫描详情

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

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

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

下载安全扫描输出

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

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

要下载安全扫描输出:

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择流水线。
  4. 选择 安全 选项卡。
  5. 扫描详情 中,选择 下载结果:
    • 要下载 JSON 文件,请选择 JSON 产物。
    • 要下载 CSV 文件,请选择 下载扫描资源

扫描结果

存在与源分支上的发现会以严重等级来降序排列。您可以通过严重等级和工具来对漏洞列表进行过滤。您还可以下载安全扫描结果,在极狐GitLab 之外分析。

默认情况下,被忽略的发现不会显示在流水线报告中。要查看这些发现,关闭 隐藏已忽略项 开关。

对于每一个发现,您可以:

  • 获取更多关于发现的信息。
  • 创建一个与发现相关的议题。
  • 忽略发现。

当您将合并请求的分支合并到目标分支时,所有在流水线中报告的发现都会被合并到漏洞报告 中。根据下表,在默认分支上执行的流水线中的扫描结果会在流水线完成后被纳入。

现有漏洞状态 在流水线中被忽略? 新的漏洞状态
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)

被阻塞或未完成流水线中的安全报告

  • 引入于极狐GitLab 16.10,使用名为 include_manual_to_pipeline_completion 的功能标志。默认启用。
流水线状态 流水线完成度 展示什么漏洞?
Success Complete ✅ 展示流水线中所发现的所有漏洞。
Failed Complete ✅ 展示任何没有失败的作业所发现的漏洞,❌ 不会展示任何失败作业发发现的安全漏洞。
Blocked Complete ✅ 展示所有安全漏洞,即使流水线被手动作业所阻塞

发现的保留时间

  • 引入于极狐GitLab 15.5。

发现在以下情况下不再可用:

  • 当相关的 CI 作业产物过期。
  • 流水线创建后的 90 天,即使相关的 CI 作业产物被锁定。

更改发现状态

  • 引入于极狐GitLab 16.7,使用名为 pipeline_security_dashboard_graphql 的功能标志。默认禁用。
  • 在极狐GitLab 17.4 中 GA。功能标志 pipeline_security_dashboard_graphql 被移除。

要将发现的状态变更为 忽略需要处理

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择流水线并选择 安全 选项卡。
  4. 选择:
    • 一个或多个发现,选择每个发现旁边的复选框。
    • 页面上的所有发现,选择表头中的复选框。
  5. 设置状态 下拉列表中选择所需的状态。
  6. 如果选择 忽略,在 设置忽略原因 下拉列表中选择原因。
  7. 添加注释 输入框中提供注释。忽略 状态下注释是必填的。
  8. 选择 更改状态

发现的状态被更新,安全选项卡的内容也会随之刷新。

数据去重复

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

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

在比较标识符时,消停在重复数据删除期间不会比较 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 中,找到每种扫描类型的定义。

故障排查

忽略的漏洞有时仍然可见

在极狐GitLab 16.8 之前,会遇到此问题,可以通过升级到 16.9 及以后版本来解决。