我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

漏洞依赖项检测疑难解答

如果 GitHub 报告的依赖项信息不符合您的预期,则需要考虑许多因素,您可以检查各种问题。

本文内容

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。

GitHub 报告的依赖项检测结果可能不同于其他工具返回的结果。 这是有原因的,它有助于了解 GitHub 如何确定项目的依赖项。

为什么似乎缺少某些依赖项?

GitHub 生成和显示依赖项数据不同于其他工具。 因此,如果您过去使用其他工具来识别依赖项,则几乎可以肯定您会看到不同的结果。 考虑以下事项:

  • GitHub Advisory Database 是 GitHub 用来识别漏洞依赖项的数据源之一。 它是一款免费的、具有整理功能的数据库,用于检测 GitHub 上常见软件包生态系统的漏洞信息。 它包括从 GitHub Security Advisories 直接报告给 GitHub 的数据,以及官方馈送和社区来源。 这些数据由 GitHub 审查和整理,以确保不会与开发社区分享虚假或不可行的信息。 更多信息请参阅“浏览 GitHub Advisory Database 中的安全漏洞”和“关于 GitHub Security Advisories”。

  • 依赖项图解析用户仓库中所有已知的包清单文件。 例如,对于 npm,它将解析 package-lock.json 文件。 它构造所有仓库依赖项和公共依赖项的图表。 当启用依赖关系图时,当任何人推送到默认分支时,都会发生这种情况,其中包括对支持的清单格式进行更改的提交。 更多信息请参阅“关于依赖关系图”。

  • Dependabot 扫描对包含清单文件的默认分支的任何推送。 添加新的漏洞记录时,它会扫描所有现有仓库,并为每个存在漏洞的仓库生成警报。 Dependabot 警报在仓库级别汇总,而不是针对每个漏洞创建一个警报。 更多信息请参阅“关于易受攻击的依赖项的警报”。

  • GitHub Dependabot 安全更新 在您收到关于仓库中漏洞依赖项的安全警报时触发。 GitHub 会自动在您的仓库中创建拉取请求,以将漏洞依赖项升级到避免漏洞所需的最低安全版本。 更多信息请参阅“配置 GitHub Dependabot 安全更新。”

    Dependabot 不会按计划扫描仓库,而是在发生某些变更时扫描仓库。 例如,当新的依赖项被添加到 GitHub 时(对于每次推送都会进行此项检查),或者当新的漏洞被发现并添加到通告数据库时,就会触发扫描。

为什么我没有收到某些生态系统的漏洞警报?

GitHub 对漏洞警报的支持限于一组可提供高质量、可操作数据的生态系统。 GitHub Advisory Database 中经整理的漏洞、依赖关系图、Dependabot 警报和 Dependabot 安全更新等功能适用于多个生态系统,包括 Java’s Maven、JavaScript’s npm 和 Yarn、.NET’s NuGet、Python’s pip、Ruby's RubyGems 以及 PHP’s Composer。 我们将在今后继续增加对更多生态系统的支持。 有关我们支持的包生态系统的概述,请参阅“关于依赖项图”。

值得注意的是,GitHub 安全通告可能存在于其他生态系统中。 安全通告中的信息由特定仓库的维护员提供。 此数据的整理方式与支持的生态系统整理信息的方式不同。

检查:未捕获的漏洞是否适用于不受支持的生态系统?

依赖项图是否只查找清单和锁文件中的依赖项?

依赖项图包含在环境中明确声明的依赖项的信息。 也就是说,在清单或锁定文件中指定的依赖项。 依赖项图通常还包括过渡依赖项,即使它们没有在锁定文件中指定,也可以通过查看清单文件中的依赖项来实现。

Dependabot 警报提醒您应更新的依赖项,包括可从清单或锁定文件确定版本的过渡依赖项。 Dependabot 安全更新仅在可直接“修复”依赖项的情况下建议更改,即,在以下情况下:

  • 在清单或锁定文件中明确声明的直接依赖项
  • 在锁定文件中声明的过渡依赖项

依赖项图不包括“宽松”依赖项。 “宽松”依赖项是指从另一个来源复制并直接或在存档文件(例如 ZIP 或 JAR 文件)中检入仓库的单个文件,而不是在包管理器的清单或锁定文件中引用的文件。

检查k:是否存在仓库清单或锁定文件中未指定组件的未捕获漏洞?

依赖项图是否检测使用变量指定的依赖项?

依赖项图在清单被推送到 GitHub 时分析它们。 因此,依赖项图无法访问项目的构建环境,从而无法解析清单中使用的变量。 如果在清单中使用变量指定名称,或指定依赖项的版本(更常见),则该依赖项不会包括在依赖项图中。

检查: 在清单中缺少的依赖项是否使用变量声明其名称或版本?

是否存在影响依赖项图数据的限制?

是的,依赖项图有两个限制类别:

  1. 处理限制

    这会影响 GitHub 中显示的依赖项图,还会阻止 Dependabot 警报的创建。

    仅为企业帐户处理大小超过 0.5 MB 的清单。 对于其他帐户,将忽略超过 0.5 MB 的清单,并且不会创建 Dependabot 警报。

    默认情况下, GitHub 对每个仓库处理的清单不会超过 20 个。 对于超出此限制的清单,不会创建 Dependabot 警报。 如果您需要提高限值,请联系 GitHub Support or GitHub Premium Support

  2. 可视化限制

    这会影响 GitHub 中依赖项图的显示内容。 但是,它们不会影响 Dependabot 警报的创建。

    仓库依赖项图的依赖项视图只显示 100 个清单。 通常这就足够了,因为它明显高于上述处理限制。 处理限制超过 100 的情况下,对于任何未在 GitHub 中显示的任何清单,仍会创建 Dependabot 警报。

检查:在超过 0.5 MB 的清单文件或包含大量清单的仓库中是否存在缺少的依赖项?

Dependabot 是否会针对已知多年的漏洞生成警报?

GitHub Advisory Database 于 2019 年 11 月推出,并在最初回顾性包含了受支持生态系统的漏洞信息(从 2017 年开始)。 将 CVE 添加到数据库时,我们会优先处理较新的 CVE,以及影响较新版本软件的 CVE。

提供了一些有关较旧漏洞的信息,尤其是在这些 CVE 特别普遍的地方,但一些较旧的漏洞未包含在 GitHub Advisory Database 中。 如果您需要将一些特定的旧漏洞包含在数据库中,请联系 GitHub Support or GitHub Premium Support

检查:未捕获的漏洞在国家漏洞数据库中的发布日期是否早于 2017 年?

为什么 GitHub Advisory Database 使用已发布漏洞数据的子集?

有些第三方工具使用未经人为检查或过滤的未整理 CVE 数据。 这意味着 CVE 带有标签或严重错误或其他质量问题,将导致更频繁,更嘈杂且更无用的警报。

由于 Dependabot 使用 GitHub Advisory Database 中的精选数据,因此警报量可能较少,但是您收到的警报将是准确和相关的。

是否每个依赖项漏洞都会生成单独的警报?

当一个依赖项有多个漏洞时,只会为该依赖项生成一个汇总警报,而不是针对每个漏洞生成一个警报。

GitHub 中的 Dependabot 警报计数显示警报总数,即有漏洞的依赖项数量,而不是漏洞的数量。

Dependabot 警报视图

单击以显示警报详细信息时,您可以查看警报中包含多少个漏洞。

Dependabot 警报的多个漏洞

检查: 如果您所看到的总数有出入,请检查您是否没有将警报数量与漏洞数量进行比较。

延伸阅读

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。