漏洞详情

  • Tier: 旗舰版
  • Offering: JihuLab.com,私有化部署

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

  • 描述
  • 检测时间
  • 当前状态
  • 可用操作
  • 已关联的议题
  • 操作日志
  • 位置
  • 严重性

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

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

如果扫描器判断该漏洞为误报,则会在漏洞页面顶部显示一条警示信息。

漏洞解释#

  • Tier: 旗舰版
  • Add-on: GitLab Duo Enterprise
  • Offering: JihuLab.com,私有化部署
Model information
History
    • 在 极狐GitLab 16.0 中作为在 JihuLab.com 上的试验阶段引入。
    • 在 极狐GitLab 16.2 中提升为 Beta。
    • 在 极狐GitLab 17.2 中 GA。
    • 在 极狐GitLab 17.6 及更高版本中更改为需要 GitLab Duo 附加组件。

GitLab Duo 漏洞解释可以借助大语言模型帮助你处理漏洞:

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

前提条件:

  • 必须拥有 极狐GitLab 旗舰版 订阅
  • 需要购买 GitLab Duo Enterprise 席位
  • 必须为群组或实例启用 GitLab Duo
  • 你必须是该项目的成员
  • 该漏洞必须来自 SAST 扫描器

解释漏洞的步骤:

  1. 在左侧边栏选择 搜索或跳转到 并找到你的项目
  2. 选择 安全 > 漏洞报告
  3. 可选。要移除默认筛选条件,选择 清除
  4. 在漏洞列表上方,选择筛选栏
  5. 在出现的下拉列表中,选择 工具,然后选择 SAST 类别中的所有值
  6. 在筛选字段外点击。漏洞严重性总计和匹配的漏洞列表会更新
  7. 选择你想解释的 SAST 漏洞
  8. 执行以下任一操作:
    • 选择漏洞描述下方的文字:你也可以通过询问 GitLab Duo Chat 来解释此漏洞并给出建议修复。
    • 在右上角的 通过合并请求修复 下拉列表中,选择 解释漏洞,然后再次选择 解释漏洞
    • 打开 GitLab Duo Chat,并通过输入 /vulnerability_explain 使用解释漏洞命令

响应会显示在页面右侧。

在 JihuLab.com 上此功能可用。默认由 国内 SOTA 大模型 提供。我们无法保证大语言模型生成的结果是正确的,请谨慎使用该解释。

用于漏洞解释时与第三方 AI API 共享的数据#

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

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

漏洞修复#

  • Tier: 旗舰版
  • Add-on: GitLab Duo Enterprise
  • Offering: JihuLab.com,私有化部署
Model information
History
    • 在 极狐GitLab 16.7 中作为在 JihuLab.com 上的试验阶段引入。
    • 在 极狐GitLab 17.3 中更改为 Beta。
    • 在 极狐GitLab 17.6 及更高版本中更改为需要 GitLab Duo 附加组件。

使用 GitLab Duo 漏洞修复自动创建一个可修复该漏洞的合并请求。默认由 国内 SOTA 大模型 提供。

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

  • 应用的现有功能是否得到保留
  • 漏洞是否按照你组织的标准得到修复

前提条件:

  • 必须拥有 极狐GitLab 旗舰版 订阅和 GitLab Duo Enterprise
  • 你必须是该项目的成员
  • 该漏洞必须是受支持分析器的 SAST 发现:
  • 漏洞必须是受支持的类型

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

修复漏洞的步骤:

  1. 在左侧边栏选择 搜索或跳转到 并找到你的项目
  2. 选择 安全 > 漏洞报告
  3. 可选。要移除默认筛选条件,选择 清除
  4. 在漏洞列表上方,选择筛选栏
  5. 在出现的下拉列表中,选择 活动,然后在 GitLab Duo(AI) 类别中选择 漏洞修复可用
  6. 在筛选字段外点击。漏洞严重性总计和匹配的漏洞列表会更新
  7. 选择你想要修复的 SAST 漏洞
    • 支持漏洞修复的漏洞旁会显示一个蓝色图标
  8. 在右上角选择 使用 AI 修复。如果该项目是公开项目,请注意创建 MR 会公开该漏洞及提供的修复方案。若要私下创建 MR,请创建一个私有派生,并重复此过程
  9. 向 MR 添加一个额外的提交。这会触发新的流水线
  10. 流水线完成后,在流水线安全选项卡确认该漏洞不再出现
  11. 在漏洞报告中手动更新该漏洞

将打开一个包含 AI 修复建议的合并请求。审查建议的更改,然后按照你的标准工作流处理该合并请求。

支持的漏洞类型(用于漏洞修复)#

为确保建议的修复质量高,漏洞修复仅适用于特定的一组漏洞。系统会根据漏洞的通用弱点枚举(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:敏感 Cookie 未设置 HttpOnly 标志
  • CWE-1275:敏感 Cookie 的 SameSite 属性不当

故障排查#

漏洞修复有时无法生成建议修复。常见原因包括:

  • 检测到误报:在提出修复前,AI 模型会评估漏洞是否有效。它可能判断该漏洞并不是真正的漏洞,或不值得修复
    • 如果漏洞发生在测试代码中,尽管你的组织可能仍选择修复测试代码中的漏洞,但模型有时会将其评估为误报
    • 如果你同意该漏洞是误报或不值得修复,你应忽略该漏洞选择匹配的理由
      • 如需自定义 SAST 配置或报告 极狐GitLab SAST 规则的问题,请参阅 SAST 规则
  • 临时或意外错误:错误消息可能声明“发生了意外错误”、“上游 AI 提供方请求超时”、“出现了问题”或类似原因
    • 这些错误可能由 AI 提供方的临时问题或 GitLab Duo 的临时问题导致
    • 新的请求可能成功,因此你可以再次尝试修复该漏洞
    • 如果你持续看到这些错误,请联系 极狐GitLab 获取帮助

用于漏洞修复时与第三方 AI API 共享的数据#

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

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

在合并请求中进行漏洞修复#

  • Tier: 旗舰版
  • Add-on: GitLab Duo Enterprise
  • Offering: JihuLab.com,私有化部署
History
    • 在 极狐GitLab 17.6 中引入。
    • 在 极狐GitLab 17.7 中默认启用。
    • 在 极狐GitLab 17.11 中 GA。功能标志 resolve_vulnerability_in_mr 已移除。

使用 GitLab Duo 漏洞修复自动创建一个合并请求建议评论,以修复该漏洞发现。默认由 国内 SOTA 大模型 提供。

修复漏洞发现的步骤:

  1. 在左侧边栏选择 搜索或跳转到 并找到你的项目
  2. 选择 合并请求
  3. 选择一个合并请求
    • 受漏洞修复支持的漏洞发现会以 tanuki AI 图标()标示
  4. 选择受支持的发现以打开安全发现对话框
  5. 在右下角选择 使用 AI 修复

将会在合并请求中打开一条包含 AI 修复建议的评论。审查建议的更改,然后按照你的标准工作流应用合并请求建议。

故障排查#

在合并请求中进行漏洞修复有时无法生成建议修复。常见原因包括:

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

漏洞代码流#

  • Tier: 旗舰版
  • Offering: JihuLab.com,私有化部署

对于特定类型的漏洞,极狐GitLab 高级 SAST 提供代码流信息。漏洞的代码流是数据从用户输入(源)到漏洞代码行(汇)之间,经过所有赋值、处理和净化的路径。

关于如何查看漏洞代码流的详情,请参阅漏洞代码流

跨两个文件的 Python 应用代码流

漏洞状态取值#

漏洞的状态可以是:

  • 待分拣:新发现的漏洞的默认状态
  • 已确认:用户已查看该漏洞并确认其准确
  • 已忽略:用户已评估该漏洞并忽略。在后续扫描中检测到时,已忽略的漏洞会被忽略
  • 已修复:该漏洞已被修复或不再存在。如果一个已修复的漏洞被重新引入并再次检测到,其记录会被恢复,状态设置为 待分拣

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

Rendering chart...

漏洞不再被检测到#

History
    • 在 极狐GitLab 17.9 中引入了解决该漏洞的提交链接,并在私有化部署上 GA。功能标志 vulnerability_representation_information 已移除。

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

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

漏洞忽略原因#

History
    • 在 极狐GitLab 15.11 中引入,带有名为 dismissal_reason 的功能标志。
    • 在 极狐GitLab 16.0 中在私有化部署上启用。
    • 在 极狐GitLab 16.2 中 GA。功能标志 dismissal_reason 已移除。

忽略漏洞时,你必须选择以下理由之一:

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

更改漏洞的状态#

History
    • 允许具有 Developer 角色的用户更改漏洞状态(admin_vulnerability)的权限在 极狐GitLab 16.4 中弃用,并在 极狐GitLab 17.0 中移除。
    • 评论 文本框在 极狐GitLab 17.9 中添加。

前提条件:

  • 你必须至少拥有该项目的 Maintainer 角色,或具有 admin_vulnerability 权限的自定义角色

在漏洞页面中更改漏洞状态的步骤:

  1. 在左侧边栏选择 搜索或跳转到 并找到你的项目
  2. 选择 安全 > 漏洞报告
  3. 选择该漏洞的描述
  4. 选择 更改状态
  5. 状态 下拉列表中选择一个状态,或在你要将漏洞状态更改为 已忽略 时选择一个忽略理由
  6. 评论 文本框中,提供关于忽略理由的更多详情。在应用 已忽略 状态时,必须填写评论

状态更改的详细信息(包括更改者和更改时间)会记录在该漏洞的操作日志中。

为漏洞创建 极狐GitLab 议题#

你可以创建 极狐GitLab 议题,以跟踪为解决或缓解漏洞而采取的任何操作。为漏洞创建 极狐GitLab 议题的步骤:

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

该议题会在极狐GitLab 项目中创建,并包含来自漏洞报告的信息。

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

将漏洞链接到 极狐GitLab 和 Jira 议题#

你可以将一个漏洞链接到一个或多个现有的极狐GitLabJira 议题。同一时间仅能启用一种链接功能。添加链接有助于跟踪解决或缓解该漏洞的议题。

前提条件:

将漏洞链接到现有 极狐GitLab 议题的步骤:

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

选定的极狐GitLab 议题会被添加到 已关联项 部分,已关联议题计数会更新。

链接到漏洞的极狐GitLab 议题会显示在漏洞报告和漏洞页面中。

请注意漏洞与已关联 极狐GitLab 议题之间的以下条件:

  • 漏洞页面显示相关议题,但议题页面不显示其关联的漏洞
  • 一个议题在同一时间只能关联到一个漏洞
  • 跨群组和项目也可进行议题链接

前提条件:

  • 确保已配置 Jira 议题集成,并勾选 为漏洞创建 Jira 议题

要将漏洞链接到现有的 Jira 议题,请在该 Jira 议题的描述中添加以下行:

plaintext
/-/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 Warrior](https://www.securecodewarrior.com/)、[Kontra](https://application.security/) 或 [SecureFlag](https://www.secureflag.com/index.html) 注册账户。极狐GitLab 不会向这些第三方供应商发送任何用户信息;我们会发送 CWE 或 OWASP 标识符以及文件扩展名的语言名称。

安全培训可帮助你的开发人员学习如何修复漏洞。开发人员可以查看所选教育提供方的安全培训,培训内容与检测到的漏洞相关。

在你的项目中启用漏洞安全培训的步骤:

  1. 在左侧边栏选择 搜索或跳转到 并找到你的项目
  2. 选择 安全 > 安全配置
  3. 在选项卡栏选择 漏洞管理
  4. 打开开关以启用一个安全培训提供方

每个集成都会向安全培训供应商提交漏洞标识符(例如 CWE 或 OWASP)以及语言。供应商培训的结果链接会显示在极狐GitLab 漏洞中。

查看某漏洞的安全培训#

如果已启用安全培训,漏洞页面可能包含与检测到的漏洞相关的培训链接。培训的可用性取决于已启用的培训供应商是否拥有匹配该特定漏洞的内容。培训内容将基于漏洞标识符进行请求。赋予漏洞的标识符会因漏洞而异,不同供应商的可用培训内容也各不相同。某些漏洞不会显示培训内容。带有 CWE 的漏洞最有可能返回培训结果。

查看某漏洞的安全培训的步骤:

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

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

History
    • 在 极狐GitLab 17.11 中引入查看依赖路径选项,并在 极狐GitLab 18.2 中 GA。功能标志 dependency_paths 默认启用。
该功能的可用性由功能标志控制。更多信息请参阅历史。

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

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

如果漏洞发生在一个或多个传递依赖中,仅了解直接依赖可能不够。传递依赖是将直接依赖作为祖先的间接依赖。

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

  • 在漏洞详情页面的 位置 下,选择 查看依赖路径。如果未出现 查看依赖路径,则表示不存在传递依赖