Go 漏洞数据库

返回 Go 漏洞管理

概述

Go 漏洞数据库 (https://vuln.go.dev) 使用 开放源代码漏洞 (OSV) 架构 提供 Go 漏洞信息。

您也可以在 pkg.go.dev/vuln 中浏览数据库中的漏洞。

不要依赖 x/vulndb Git 存储库的内容。该存储库中的 YAML 文件使用内部格式维护,可能会在没有预警的情况下更改。

贡献

我们希望所有 Go 包维护者都能 贡献 有关其自身项目中公开漏洞的信息,并 更新 有关其 Go 包中漏洞的现有信息。

我们的目标是使报告成为一个低摩擦的过程,因此请随时 向我们发送您的建议

不要使用以上表格报告 Go 标准库或子存储库中的漏洞。相反,请按照 go.dev/security/policy 中的流程处理有关 Go 项目的漏洞。

API

规范的 Go 漏洞数据库,https://vuln.go.dev,是一个 HTTP 服务器,可以响应针对下面指定的端点的 GET 请求。

端点没有查询参数,也不需要任何特定的标头。正因为如此,即使是从固定文件系统(包括 file:// URL)提供服务的站点也可以实现此 API。

每个端点都返回一个 JSON 编码的响应,可以是未压缩的(如果请求为 .json)或 gzip 形式的(如果请求为 .json.gz)。

端点为

批量下载

为了更轻松地下载整个 Go 漏洞数据库,可以在 vuln.go.dev/vulndb.zip 获取包含所有索引和 OSV 文件的 zip 文件。

govulncheck 中使用

默认情况下,govulncheck 使用 vuln.go.dev 上的规范 Go 漏洞数据库。

可以使用 -db 标志配置该命令以联系不同的漏洞数据库,该标志接受一个具有 http://https://file:// 协议的漏洞数据库 URL。

为了与 govulncheck 正确配合使用,指定的漏洞数据库必须实现上面描述的 API。govulncheck 命令在从 http(s) 源读取时使用压缩的“.json.gz”端点,在从文件源读取时使用“.json”端点。

旧版 API

规范的数据库包含一些额外的端点,这些端点是旧版 API 的一部分。我们计划很快删除对这些端点的支持。如果您依赖于旧版 API 并且需要更多时间来迁移,请 告知我们

架构

报告使用 开放源代码漏洞 (OSV) 架构。Go 漏洞数据库对字段分配以下含义

id

id 字段是漏洞条目的唯一标识符。它是一个格式为 GO-<YEAR>-<ENTRYID> 的字符串。

affected

affected 字段是一个 JSON 数组,其中包含描述包含漏洞的模块版本的对象。

affected[].package

affected[].package 字段是一个 JSON 对象,用于标识受影响的模块。该对象有两个必填字段

affected[].ecosystem_specific

affected[].ecosystem_specific 字段是一个 JSON 对象,其中包含有关漏洞的附加信息,Go 的漏洞检测工具将使用这些信息。

目前,生态系统特定将始终是一个具有单个字段的对象,即 imports

affected[].ecosystem_specific.imports

affected[].ecosystem_specific.imports 字段是一个 JSON 数组,其中包含受漏洞影响的包和符号。数组中的每个对象都将具有以下两个字段

database_specific

database_specific 字段包含 Go 漏洞数据库特有的自定义字段。

database_specific.url

database_specific.url 字段是一个字符串,表示 Go 漏洞报告的完整限定 URL,例如“https://pkg.go.dev/vuln/GO-2023-1621"

database_specific.review_status

database_specific.review_status 字段是一个字符串,表示漏洞报告的审查状态。如果不存在,则应将报告视为 REVIEWED。可能的值为

有关架构中其他字段的信息,请参阅 OSV 规范

关于版本的说明

我们的工具尝试根据标准 Go 模块版本号,自动将源代码建议中的模块和版本映射到规范的 Go 模块和版本。govulncheck 等工具旨在依靠这些标准版本来确定 Go 项目是否受到依赖项中的漏洞的影响。

在某些情况下,例如当 Go 项目使用自己的版本控制方案时,映射到标准 Go 版本可能会失败。发生这种情况时,Go 漏洞数据库报告可能会保守地将所有 Go 版本列为受影响的版本。这确保了诸如 govulncheck 之类的工具不会由于无法识别的版本范围(误报)而无法报告漏洞。但是,保守地将所有版本列为受影响的版本可能会导致工具错误地报告已修复的模块版本包含该漏洞(误报)。

如果您认为 govulncheck 错误地报告了(或未报告)漏洞,请 建议对漏洞报告进行编辑,我们将对其进行审查。

示例

Go 漏洞数据库中的所有漏洞都使用上面描述的 OSV 架构。

请参阅下面的链接,了解不同 Go 漏洞的示例

排除的报告

Go 漏洞数据库中的报告来自不同的来源,并由 Go 安全团队进行整理。我们可能会遇到漏洞建议(例如 CVE 或 GHSA),并选择将其排除在外的多种原因。在这些情况下,将在 x/vulndb 存储库中 x/vulndb/data/excluded 下创建一份最小报告。

报告可能因以下原因被排除

目前,被排除的报告不会通过 vuln.go.dev API 提供。但是,如果您有特定的用例,并且通过 API 访问此信息将有所帮助,请告诉我们