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 咨询数据库中的已整理数据,因此警报量可能会减少,但您收到的警报将准确且相关。
每个不安全的依赖项是否都会生成单独的警报?
当依赖项具有多个漏洞时,将在咨询级别加上清单级别为每个漏洞生成警报。
旧版 Dependabot 警报被分组到一个汇总警报中,其中包含同一依赖项的所有漏洞。如果您导航到旧版 Dependabot 警报的链接,您将被重定向到 Dependabot 警报选项卡,该选项卡已过滤以显示该依赖软件包和清单的漏洞。
GitHub 中的 Dependabot 警报计数显示警报总数,即漏洞数,而不是依赖项数。
检查:如果看到总数存在差异,请检查您是否没有将警报数与依赖项数进行比较。还要检查您是否查看了所有警报,而不是已过滤警报的子集。
Dependabot 可以忽略特定依赖项吗?
您可以在配置文件中配置 Dependabot 以忽略特定依赖项,这将阻止这些依赖项的安全和版本更新。如果您只想使用安全更新,则需要使用配置文件覆盖默认行为。有关更多信息,请参阅“配置 Dependabot 安全更新”以防止激活版本更新。有关忽略依赖项的信息,请参阅“dependabot.yml 文件的配置选项”。