跳至主要内容

排查易受攻击的依赖项检测故障

如果 GitHub 报告的依赖项信息与您预期不符,则需要考虑一些要点,并检查各种内容。

GitHub 报告的依赖项检测结果可能与其他工具返回的结果不同。 这是有充分理由的,了解 GitHub 如何确定项目的依赖项非常有帮助。

为什么某些依赖项似乎丢失了?

GitHub 生成和显示依赖项数据的方式与其他工具不同。 因此,如果您一直在使用其他工具来识别依赖项,您几乎肯定会看到不同的结果。 请考虑以下几点

  • GitHub 安全公告数据库是 GitHub 用于识别易受攻击的依赖项和恶意软件的数据源之一。 它是 GitHub 上常见包生态系统安全公告的免费、精选数据库。 它包括 GitHub 安全公告直接报告给 GitHub 的数据,以及官方 Feed 和社区来源。 GitHub 会审查和整理这些数据,以确保不会与开发社区共享虚假或无法操作的信息。 有关更多信息,请参阅“在 GitHub 安全公告数据库中浏览安全公告”。

  • 依赖关系图解析用户存储库中所有已知的包清单文件。 例如,对于 npm,它将解析package-lock.json文件。 它构建了存储库的所有依赖项和公共依赖项的图。 这是在您启用依赖关系图以及任何人在默认分支上推送时发生的,并且包括对支持的清单格式进行更改的提交。 有关更多信息,请参阅“关于依赖关系图”和“排查依赖关系图故障”。

  • Dependabot 会扫描对包含清单文件的默认分支的任何推送。 添加新的公告时,它会扫描所有现有存储库并为每个受影响的存储库生成警报。 Dependabot 警报在存储库级别进行聚合,而不是为每个公告创建一个警报。 有关更多信息,请参阅“关于 Dependabot 警报”。

  • 当您收到有关存储库中易受攻击的依赖项的警报时,Dependabot 安全更新就会触发。 在可能的情况下,Dependabot 会在您的存储库中创建一个拉取请求,以将易受攻击的依赖项升级到避免漏洞所需的最低安全版本。 有关更多信息,请参阅“关于 Dependabot 安全更新”和“排查 Dependabot 错误”。

    Dependabot 不会按计划扫描存储库,而是在某些内容发生更改时扫描。 例如,当添加新的依赖项时会触发扫描(GitHub 会在每次推送时检查此项),或者当数据库中添加新的公告时也会触发扫描。 有关更多信息,请参阅“关于 Dependabot 警报”。

Dependabot 警报是否仅与清单和锁定文件中不安全的依赖项相关?

Dependabot 警报会告知您应该更新的依赖项,包括传递依赖项,其中版本可以从清单或锁定文件中确定。Dependabot 安全更新仅在 Dependabot 可以直接“修复”依赖项时建议更改,即,当这些是

  • 在清单或锁定文件中显式声明的直接依赖项
  • 在锁定文件中声明的传递依赖项

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

为什么我不会收到某些生态系统的 Dependabot 警报?

Dependabot 警报支持我们能够提供高质量、可操作数据的生态系统集。GitHub 咨询数据库中的精选咨询、依赖关系图、Dependabot 安全更新和 Dependabot 警报适用于多个生态系统,包括 Java 的 Maven、JavaScript 的 npm 和 Yarn、.NET 的 NuGet、Python 的 pip、Ruby 的 RubyGems 和 PHP 的 Composer。有关我们支持 Dependabot 警报的软件包生态系统的概述,请参阅“依赖关系图支持的软件包生态系统”。

值得注意的是,其他生态系统可能存在安全咨询。未经审查的安全咨询中的信息由特定存储库的维护者提供。此数据未经 GitHub 审核。有关更多信息,请参阅“在 GitHub 咨询数据库中浏览安全咨询”。

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

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

GitHub 咨询数据库于 2019 年 11 月推出,最初回填以包含受支持生态系统中安全风险的咨询,从 2017 年开始。在将 CVE 添加到数据库时,我们优先考虑整理更新的 CVE,以及影响软件更新版本的 CVE。

提供了一些有关旧漏洞的信息,尤其是在这些 CVE 非常普遍的情况下,但某些旧漏洞未包含在 GitHub 咨询数据库中。如果您需要将特定旧漏洞包含在数据库中,请通过 GitHub 支持门户 与我们联系。

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

为什么 GitHub 咨询数据库使用已发布漏洞数据的子集?

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

由于 Dependabot 使用 GitHub 咨询数据库中的已整理数据,因此警报量可能会减少,但您收到的警报将准确且相关。

每个不安全的依赖项是否都会生成单独的警报?

当依赖项具有多个漏洞时,将在咨询级别加上清单级别为每个漏洞生成警报。

Screenshot of the Dependabot alerts tab showing two alerts from the same package with different manifests.

旧版 Dependabot 警报被分组到一个汇总警报中,其中包含同一依赖项的所有漏洞。如果您导航到旧版 Dependabot 警报的链接,您将被重定向到 Dependabot 警报选项卡,该选项卡已过滤以显示该依赖软件包和清单的漏洞。

Screenshot of the Dependabot alerts tab showing the filtered alerts from navigating to a legacy Dependabot alert.

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

检查:如果看到总数存在差异,请检查您是否没有将警报数与依赖项数进行比较。还要检查您是否查看了所有警报,而不是已过滤警报的子集。

Dependabot 可以忽略特定依赖项吗?

您可以在配置文件中配置 Dependabot 以忽略特定依赖项,这将阻止这些依赖项的安全和版本更新。如果您只想使用安全更新,则需要使用配置文件覆盖默认行为。有关更多信息,请参阅“配置 Dependabot 安全更新”以防止激活版本更新。有关忽略依赖项的信息,请参阅“dependabot.yml 文件的配置选项”。

进一步阅读