Vulnerability information

NuGet 客户端(从版本 6.7 开始)可以下载已知包漏洞信息,以在还原作期间检查包等方案中使用。 虽然 包元数据资源 还包含已知的漏洞信息,但如果应用需要检查大量包是否存在已知漏洞,则在本地下载已知漏洞和查找文件的速度要快得多,而不是发出大量 HTTP 请求。 例如,这使 NuGet 还原能够快速检查已还原的包是否存在已知漏洞,这些漏洞从历史上从未从包元数据资源下载包详细信息。

API 包含至少两个文件, 即漏洞索引 和一个或多个 漏洞页文件。 已知漏洞数据可以分区到多个文件中,漏洞索引为客户端提供缓存文件所需的信息,并有效地更新缓存。

用于生成此 URL 的资源是在 VulnerabilityInfo中找到的 资源。

建议的分区策略

最好优化漏洞索引中列出的页面,以最大化缓存,从而最大程度地减少对大型文件的更新。 这将允许客户端最大程度地减少下载更新所需的频率。

漏洞数据分区的建议策略是有两个页面, base.jsonupdates.json 该文件 base.json 会定期更新(例如每月更新一次),并包含文件重新生成时的所有已知漏洞。 updates.json该文件应包含自上次重新生成以来base.json发布的任何新公告。 这将允许客户端不经常下载大型 base.json 文件,而经常更改 updates.json 的文件始终相对较小。

NuGet 客户端可累加合并来自多个文件的数据,并且可以按任意顺序加载文件。 数据文件架构不允许修改或修改来自另一个文件的已知漏洞。 因此,如果服务器的漏洞数据源(例如 GitHub 顾问数据库)修改现有公告,NuGet 服务器必须修改以前报告漏洞信息的页面。 使用建议的分区方案实现此目的的一种方法是将所有漏洞修改和删除视为重新生成完整 base.json 文件和空 updates.json的触发器。

如果打算在自己的 NuGet 服务器实现中使用 nuget.org 的漏洞数据,则应考虑没有直接访问 nuget.org 的开发人员。 有关更多详细信息,请参阅我们的实现指南

Versioning

使用以下 @type 值:

@type 值 Notes
VulnerabilityInfo/6.7.0 初始版本

Vulnerability index

漏洞索引是具有以下属性的对象 JSON 数组:

Name 类型 Required Notes
@name 字符串 yes 文件的短名称,用作缓存键。
@id 字符串 yes 漏洞数据文件的完整(绝对)URL。
@updated 字符串 yes 一个 ISO 8601 字符串,表示文件的上次更新日期和时间,最好是使用 UTC 时区。
注释 字符串 no 可选的描述性字符串。

存在以下限制:

  • 索引必须是包含 1 到 16 个项的对象数组。 如果服务器没有任何漏洞数据(零页),则必须从中ServiceIndex删除VulnerabilityInfo资源。
  • @name在索引中必须唯一,长度必须介于 1 到 32 个字符之间,并且只能使用字符对、to、to -9z0 或。_aZA
  • @id 必须是绝对 URL,而不是相对 URL。

Vulnerability page

漏洞页文件是用作字典的 JSON 对象。 属性键是小写包 ID,属性值是具有以下属性的以下对象的数组:

Name 类型 Required Notes
severity 整数 yes 0 表示低,1 表示中,2 表示高,3 表示关键。
url 字符串 yes 用户可以获取有关漏洞的详细信息的 URL。
versions 字符串 yes 使用 NuGet 的版本范围语法易受攻击的版本范围

包 ID(根对象的键)必须小写。String.ToLowerInvariant

包的已知漏洞列表应按版本最大版本范围的降序排序,后跟最小版本的降序版本,后跟 URL 的升序。 版本范围中具有 null 最小值或最大版本(未绑定)的范围应在非 null(有限)版本之前进行排序。

空页(不提供任何已知漏洞的页)必须是空 JSON 数组([])。

Samples

下面是漏洞索引的示例:

[
    {
        "@name": "base",
        "@id": "https://nuget.contoso.com/v3/vulnerabilities/3bb6b300-2f74-45bc-af06-746fd21c024b.json",
        "@updated": "2023-06-01T06:14:58.4159909Z",
        "comment": "The base data for vulnerability update periodically"
    },
    {
        "@name": "update",
        "@id": "https://nuget.contoso.com/v3/vulnerabilities/ffd572cd-33f3-4372-8714-a9cab2e86b45.json",
        "@updated": "2023-06-14T11:35:30.3155764Z",
        "comment": "The patch data for the vulnerability. Contains all the vulnerabilities since base was last updated."
    }
]

下面是漏洞数据文件的示例:

{
    "contoso.library": [
        {
            "url": "https://cve.contoso.com/advisories/1",
            "severity": 1,
            "versions": "(, 2.0.0)"
        },
        {
            "url": "https://cve.contoso.com/advisories/2",
            "severity": 2,
            "versions": "(1.0.0, 2.0.0)"
        }
    ],
    "contoso.utilities": [
        {
            "url": "https://cve.contoso.com/advisories/3",
            "severity": 3,
            "versions": "(, 1.0.0)"
        }
    ]
}