Help us learn about your current experience with the documentation. Take the survey.

漏洞详情

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

项目中的每个漏洞都有一个漏洞页面,包含漏洞的详细信息,包括:

  • 描述
  • 检测时间
  • 当前状态
  • 可用操作
  • 关联问题
  • 操作日志
  • 位置
  • 严重程度

对于 通用漏洞披露(CVE) 目录中的漏洞,这些详细信息还包括:

有关这些额外数据的更多详情,请参阅 漏洞风险评估数据

如果扫描器确定漏洞为误报,漏洞页面顶部会显示一条警告信息。

漏洞解释

GitLab Duo 漏洞解释可以使用大型语言模型帮助您处理漏洞:

  • 总结漏洞信息。
  • 帮助开发人员和安全分析师理解漏洞、可能的利用方式以及修复方法。
  • 提供建议的缓解措施。

观看概述视频

先决条件:

  • 您必须拥有 GitLab Ultimate 订阅层级。
  • 拥有付费的 GitLab Duo Enterprise 许可证。
  • GitLab Duo 必须在组或实例级别启用。
  • 您必须是项目的成员。
  • 漏洞必须来自 SAST 扫描器。

解释漏洞:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。

  2. 选择 安全 > 漏洞报告

  3. 可选。要移除默认筛选器,选择 清除 clear )。

  4. 在漏洞列表上方,选择筛选栏。

  5. 在出现的下拉列表中,选择 工具,然后选择 SAST 类别中的所有值。

  6. 在筛选字段外单击。漏洞严重程度总数和匹配漏洞列表将更新。

  7. 选择您想要解释的 SAST 漏洞。

  8. 执行以下操作之一:

    • 选择漏洞描述下方的文本,显示 您也可以通过询问 GitLab Duo Chat 来使用 AI 解释此漏洞和建议的修复方案。
    • 在右上角,从 通过合并请求解决 下拉列表中选择 解释漏洞,然后选择 解释漏洞
    • 打开 GitLab Duo Chat 并通过输入 /vulnerability_explain 命令使用 解释漏洞 功能。

响应显示在页面右侧。

在 GitLab.com 上此功能可用。默认情况下,它由 Anthropic claude-3-haiku 模型提供支持。我们无法保证大型语言模型产生正确的结果。请谨慎使用解释功能。

漏洞解释功能与第三方 AI API 共享的数据

以下数据与第三方 AI API 共享:

  • 漏洞标题(可能包含文件名,具体取决于使用的扫描器)。
  • 漏洞标识符。
  • 文件名。

漏洞解决

  • Tier: Ultimate
  • Add-on: GitLab Duo Enterprise, GitLab Duo with Amazon Q
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
  • LLM for GitLab Self-Managed, GitLab Dedicated: Anthropic Claude 3.5 Sonnet
  • LLM for GitLab.com: Anthropic Claude 3.7 Sonnet
  • LLM for Amazon Q: Amazon Q Developer
  • Available on GitLab Duo with self-hosted models: Yes

使用 GitLab Duo 漏洞解决功能自动创建合并请求来解决漏洞。默认情况下,它由 Anthropic claude-3.5-sonnet 模型提供支持。

我们无法保证大型语言模型产生正确的结果。 您应该始终在合并前审查建议的更改。审查时,请确保:

  • 您应用程序的现有功能得到保留。
  • 漏洞已根据您组织的标准得到解决。

观看概述视频

先决条件:

  • 您必须拥有 GitLab Ultimate 订阅层级和 GitLab Duo Enterprise。
  • 您必须是项目的成员。
  • 漏洞必须来自支持的分析器的 SAST 发现:
    • 任何 GitLab 支持的分析器
    • 正确集成的第三方 SAST 扫描器,能够报告漏洞位置和每个漏洞的 CWE 标识符。
  • 漏洞必须是 支持的类型

了解更多关于 如何启用所有 GitLab Duo 功能

解决漏洞:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 可选。要移除默认筛选器,选择 清除 clear )。
  4. 在漏洞列表上方,选择筛选栏。
  5. 在出现的下拉列表中,选择 活动,然后在 GitLab Duo (AI) 类别中选择 漏洞解决可用
  6. 在筛选字段外单击。漏洞严重程度总数和匹配漏洞列表将更新。
  7. 选择您想要解决的 SAST 漏洞。
    • 支持漏洞解决的漏洞旁边会显示蓝色图标。
  8. 在右上角,选择 通过 AI 解决。如果此项目是公共项目,请注意创建合并请求会公开暴露漏洞和提供的解决方案。要私下创建合并请求,创建私有分支,然后重复此过程。
  9. 向合并请求添加额外的提交。这将强制运行新的流水线。
  10. 流水线完成后,在 流水线安全标签页 上确认漏洞不再出现。
  11. 在漏洞报告中,手动更新漏洞状态

将包含 AI 修复建议的合并请求打开。审查建议的更改,然后根据您的标准流程处理合并请求。

在此功能上提供反馈,请访问 issue 476553

漏洞解决支持的漏洞类型

为确保建议的解决方案质量高,漏洞解决功能仅适用于特定类型的漏洞。 系统根据漏洞的通用枚举弱点(CWE)标识符决定是否提供漏洞解决功能。

我们根据自动化系统和安全专家的测试选择了当前的漏洞集合。 我们正在积极努力扩展对更多类型漏洞的支持。

查看漏洞解决支持的完整 CWE 列表
  • CWE-23: 相对路径遍历
  • CWE-73: 外部控制文件名或路径
  • CWE-78: 对操作系统命令中使用的特殊元素进行不适当的净化("操作系统命令注入")
  • CWE-80: 在网页中对与脚本相关的 HTML 标记进行不适当的净化(基础 XSS)
  • CWE-89: 对 SQL 命令中使用的特殊元素进行不适当的净化("SQL 注入")
  • CWE-116: 输出不正确的编码或转义
  • CWE-118: 不正确访问可索引资源("范围错误")
  • CWE-119: 对内存缓冲区边界内的操作进行不当限制
  • CWE-120: 不检查输入大小就复制缓冲区("经典缓冲区溢出")
  • CWE-126: 缓冲区读取溢出
  • CWE-190: 整数溢出或环绕
  • CWE-200: 向未经授权的参与者泄露敏感信息
  • CWE-208: 可观察到的时序差异
  • CWE-209: 生成包含敏感信息的错误消息
  • CWE-272: 最小权限违规
  • CWE-287: 不正确的身份验证
  • CWE-295: 不正确的证书验证
  • CWE-297: 不验证主机不匹配的证书
  • CWE-305: 通过主要弱点绕过身份验证
  • CWE-310: 加密问题
  • CWE-311: 缺少敏感数据加密
  • CWE-323: 在加密中重用随机数、密钥对
  • CWE-327: 使用损坏或有风险的加密算法
  • CWE-328: 使用弱哈希
  • CWE-330: 使用随机性不足的值
  • CWE-338: 使用加密弱伪随机数生成器(PRNG)
  • CWE-345: 对数据真实性验证不足
  • CWE-346: 来源验证错误
  • CWE-352: 跨站请求伪造
  • CWE-362: 使用共享资源进行并发执行且不正确同步("竞争条件")
  • CWE-369: 除以零
  • CWE-377: 不安全的临时文件
  • CWE-378: 创建具有不安全权限的临时文件
  • CWE-400: 不可控的资源消耗
  • CWE-489: 活动调试代码
  • CWE-521: 弱密码要求
  • CWE-539: 使用包含敏感信息的持久 Cookie
  • CWE-599: 缺少 OpenSSL 验证
  • CWE-611: 对 XML 外部实体引用限制不当
  • CWE-676: 使用潜在危险的函数
  • CWE-704: 不正确的类型转换或强制转换
  • CWE-754: 不检查异常或异常条件
  • CWE-770: 无限制或无节制的资源分配
  • CWE-1004: 没有 'HttpOnly' 标志的敏感 Cookie
  • CWE-1275: 具有不正确 SameSite 属性的敏感 Cookie

故障排除

漏洞解决功能有时无法生成建议的修复方案。常见原因包括:

  • 检测到误报:在提出修复方案之前,AI 模型会评估漏洞是否有效。它可能判断漏洞不是真正的漏洞,或者不值得修复。
    • 如果漏洞发生在测试代码中,可能会发生这种情况。您的组织可能仍选择修复测试代码中的漏洞,但模型有时会将其评估为误报。
    • 如果您同意漏洞是误报或不值得修复,您应该 忽略漏洞选择匹配的原因
      • 要自定义您的 SAST 配置或报告 GitLab SAST 规则的问题,请参阅 SAST 规则
  • 临时或意外错误:错误消息可能显示"发生意外错误"、“上游 AI 提供商请求超时”、“出现问题"或类似原因。
    • 这些错误可能是由于 AI 提供商或 GitLab Duo 的临时问题引起的。
    • 新的请求可能会成功,因此您可以尝试再次解决漏洞。
    • 如果您继续看到这些错误,请联系 GitLab 获取帮助。

漏洞解决功能与第三方 AI API 共享的数据

以下数据与第三方 AI API 共享:

  • 漏洞名称
  • 漏洞描述
  • 标识符(CWE、OWASP)
  • 包含易受攻击代码行的整个文件
  • 易受攻击的代码行(行号)

合并请求中的漏洞解决

  • Tier: Ultimate
  • Add-on: GitLab Duo Enterprise
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

使用 GitLab Duo 漏洞解决功能自动创建合并请求建议评论来解决漏洞发现。默认情况下,它由 Anthropic claude-3.5-sonnet 模型提供支持。

解决漏洞发现:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 合并请求
  3. 选择一个合并请求。
    • 支持漏洞解决的漏洞发现由 tanuki AI 图标( tanuki-ai )指示。
  4. 选择支持的发现以打开安全发现对话框。
  5. 在右下角,选择 通过 AI 解决

包含 AI 修复建议的评论在合并请求中打开。审查建议的更改,然后根据您的标准流程应用合并请求建议。

在此功能上提供反馈,请访问 issue 476553

故障排除

合并请求中的漏洞解决功能有时无法生成建议的修复方案。常见原因包括:

  • 检测到误报:在提出修复方案之前,AI 模型会评估漏洞是否有效。它可能判断漏洞不是真正的漏洞,或者不值得修复。
    • 如果漏洞发生在测试代码中,可能会发生这种情况。您的组织可能仍选择修复测试代码中的漏洞,但模型有时会将其评估为误报。
    • 如果您同意漏洞是误报或不值得修复,您应该 忽略漏洞选择匹配的原因
      • 要自定义您的 SAST 配置或报告 GitLab SAST 规则的问题,请参阅 SAST 规则
  • 临时或意外错误:错误消息可能显示"发生意外错误”、“上游 AI 提供商请求超时”、“出现问题"或类似原因。
    • 这些错误可能是由于 AI 提供商或 GitLab Duo 的临时问题引起的。
    • 新的请求可能会成功,因此您可以尝试再次解决漏洞。
    • 如果您继续看到这些错误,请联系 GitLab 获取帮助。
  • 无法在合并请求中找到解决目标,无法创建建议:
    • 当目标分支未运行完整的安全扫描流水线时,可能会发生此错误。请参阅 合并请求文档

漏洞代码流

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

对于特定类型的漏洞,GitLab Advanced SAST 提供 代码流 信息。 漏洞的代码流是从用户输入(源)到易受攻击的代码行(目标)的数据路径,经过所有赋值、操作和净化。

有关如何查看漏洞代码流的详细信息,请参阅 漏洞代码流

Python 应用程序在两个文件之间的代码流

漏洞状态值

漏洞的状态可以是:

  • 需要分类:新发现的漏洞的默认状态。
  • 已确认:用户已查看此漏洞并确认其准确性。
  • 已忽略:用户已评估漏洞并 忽略它。 被忽略的漏洞在后续扫描中会被忽略。
  • 已解决:漏洞已修复或不再存在。如果已解决的漏洞被重新引入并再次被检测到,其记录将被恢复,状态设置为 需要分类

漏洞通常经历以下生命周期:

%%{init: { "fontFamily": "GitLab Sans" }}%%
stateDiagram
    accTitle: 漏洞生命周期
    accDescr: 漏洞的典型生命周期

    direction LR
    Needs_triage: 需要分类

    [*] --> Needs_triage
    Needs_triage --> Confirmed
    Needs_triage --> Dismissed
    Dismissed --> [*]
    Confirmed --> Resolved
    Resolved --> Needs_triage: 如果重新引入并再次检测到
    Resolved --> [*]

漏洞不再被检测到

漏洞可能不再被检测到,原因是故意进行的修复更改或其他更改的副作用。当安全扫描运行且漏洞在默认分支中不再被检测到时,扫描器会将 不再被检测到 添加到记录的活动日志中,但记录的状态不会改变。相反,您应该检查并确认漏洞已解决,如果是这样,手动将其状态更改为 已解决。您还可以使用 漏洞管理策略 自动将符合特定条件的漏洞状态更改为 已解决

您可以在漏洞页面顶部或底部找到修复漏洞的提交链接。

漏洞忽略原因

当您忽略漏洞时,必须选择以下原因之一:

  • 可接受风险:漏洞已知,未修复或缓解,但被认为是可接受的业务风险。
  • 误报:报告错误,测试结果错误地表明系统中存在漏洞,而实际上漏洞不存在。
  • 缓解控制:漏洞的风险通过组织采用的管理、运营或技术控制(即保护措施或对策)得到缓解,为信息系统提供等效或可比的保护。
  • 用于测试:发现不是漏洞,因为它是测试的一部分或测试数据。
  • 不适用:漏洞已知,未修复或缓解,但被认为位于应用程序中不会更新的部分。

更改漏洞状态

先决条件:

  • 您必须拥有项目的 Maintainer 角色或具有 admin_vulnerability 权限的自定义角色。

从漏洞页面更改漏洞状态:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择漏洞的描述。
  4. 选择 更改状态
  5. 状态 下拉列表中,选择状态或当您要将漏洞状态更改为 已忽略 时选择 忽略原因
  6. 评论 文本框中,提供关于忽略原因的更多详细信息。当您应用 已忽略 状态时,评论是必需的。

状态更改的详细信息,包括谁进行了更改和何时进行,都会记录在漏洞的操作日志中。

为漏洞创建 GitLab 问题

您可以创建 GitLab 问题来跟踪解决或缓解漏洞所采取的任何操作。 为漏洞创建 GitLab 问题:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择漏洞的描述。
  4. 选择 创建问题

问题将在 GitLab 项目中创建,并包含来自漏洞报告的信息。

要创建 Jira 问题,请参阅 为漏洞创建 Jira 问题

将漏洞与 GitLab 和 Jira 问题关联

您可以将漏洞与一个或多个现有的 GitLabJira 问题关联。一次只能使用一个关联功能。添加关联有助于跟踪解决或缓解漏洞的问题。

将漏洞与现有的 GitLab 问题关联

先决条件:

将漏洞与现有的 GitLab 问题关联:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择漏洞的描述。
  4. 关联问题 部分,选择加号图标( plus )。
  5. 对于每个要关联的问题,执行以下操作之一:
    • 粘贴问题的链接。
    • 输入问题的 ID(以 # 为前缀)。
  6. 选择 添加

选定的 GitLab 问题将添加到 关联项目 部分,关联问题计数器将更新。

与漏洞关联的 GitLab 问题显示在漏洞报告和漏洞页面上。

请注意漏洞与关联 GitLab 问题之间的以下条件:

  • 漏洞页面显示相关问题,但问题页面不显示其关联的漏洞。
  • 一个问题一次只能关联一个漏洞。
  • 问题可以跨组和项目关联。

将漏洞与现有的 Jira 问题关联

先决条件:

  • 确保 Jira 问题集成已 配置 并且已选择 为漏洞创建 Jira 问题 复选框。

将漏洞与现有的 Jira 问题关联,将以下行添加到 Jira 问题的描述中:

/-/security/vulnerabilities/<id>

<id> 是任何 漏洞 ID。 您可以在一个描述中添加多行不同的 ID。

具有适当描述的 Jira 问题将添加到 关联的 Jira 问题 部分,关联问题计数器将更新。

与漏洞关联的 Jira 问题仅显示在漏洞页面上。

请注意漏洞与关联 Jira 问题之间的以下条件:

  • 漏洞页面和问题页面都显示其关联的漏洞。
  • 一个问题可以同时关联一个或多个漏洞。

解决漏洞

对于某些漏洞,解决方案已知但需要手动实施。漏洞页面中的 解决方案 字段由报告安全发现的安全扫描工具提供,或在 手动创建漏洞 期间输入。 GitLab 工具利用 GitLab 咨询数据库 中的信息。

此外,某些工具可能包含软件补丁来应用建议的解决方案。在这些情况下,漏洞页面包括 通过合并请求解决 选项。

此功能支持的扫描器包括:

要解决漏洞,您可以:

从漏洞创建合并请求

通过合并请求解决漏洞

通过合并请求解决漏洞:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择漏洞的描述。
  4. 通过合并请求解决 下拉列表中,选择 通过合并请求解决

将创建一个合并请求,应用解决漏洞所需的补丁。 根据您的标准流程处理合并请求。

手动解决漏洞

手动应用 GitLab 为漏洞生成的补丁:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择漏洞的描述。
  4. 通过合并请求解决 下拉列表中,选择 下载补丁以解决
  5. 确保您的本地项目检出了用于生成补丁的相同提交。
  6. 运行 git apply remediation.patch
  7. 验证并将更改提交到您的分支。
  8. 创建合并请求以将更改应用到主分支。
  9. 根据您的标准流程处理合并请求。

为漏洞启用安全培训

安全培训在离线环境中不可访问,即作为安全措施与公共互联网隔离的计算机。具体来说,GitLab 服务器需要能够查询您选择启用的任何培训提供商的 API 端点。一些第三方培训供应商可能要求您注册免费账户。通过访问 Secure Code WarriorKontraSecureFlag 中的任何一个来注册账户。 GitLab 不会向这些第三方供应商发送任何用户信息;我们确实发送 CWE 或 OWASP 标识符和文件扩展名的语言名称。

安全培训帮助您的开发人员学习如何修复漏洞。开发人员可以从选定的教育提供商查看与检测到的漏洞相关的安全培训。

为项目中的漏洞启用安全培训:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 安全配置
  3. 在选项卡栏上,选择 漏洞管理
  4. 要启用安全培训提供商,打开切换开关。

每个集成将漏洞标识符(例如 CWE 或 OWASP)和语言提交给安全培训供应商。供应商培训的链接将显示在 GitLab 漏洞中。

查看漏洞的安全培训

如果启用了安全培训,漏洞页面可能包含与检测到的漏洞相关的培训链接。 培训的可用性取决于启用的培训供应商是否有匹配特定漏洞的内容。 培训内容根据漏洞标识符请求。 给定漏洞的标识符因漏洞而异,不同供应商的可用培训内容也不同。一些漏洞不显示培训内容。 具有 CWE 的漏洞最有可能返回培训结果。

查看漏洞的安全培训:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 安全 > 漏洞报告
  3. 选择您要查看安全培训的漏洞。
  4. 选择 查看培训

查看传递依赖中漏洞的位置

此功能的可用性由功能标志控制。 有关更多信息,请参阅历史记录。

在漏洞详情中管理依赖项中发现的漏洞时,在 位置 下,您可以查看:

  • 发现漏洞的直接依赖项的位置。
  • 如果可用,漏洞发生的特定行号。

如果漏洞发生在多个传递依赖项中,仅知道直接依赖项可能不够。传递依赖项是具有直接依赖项作为祖先的间接依赖项。

如果存在任何传递依赖项,您可以查看到所有依赖项的路径,包括包含漏洞的传递依赖项。

  • 在漏洞详情页面,在 位置 下,选择 查看依赖项路径。如果 查看依赖项路径 未显示,则没有传递依赖项。