Go 漏洞管理
概览
Go 帮助开发者检测、评估和解决可能被攻击者利用的错误或弱点。在后台,Go 团队运行一个管道来整理关于漏洞的报告,这些报告存储在 Go 漏洞数据库中。各种库和工具可以读取和分析这些报告,以了解特定的用户项目可能受到何种影响。此功能已集成到 Go 包发现网站 和新的 CLI 工具 govulncheck 中。
本项目仍在进行中,并处于积极开发阶段。我们欢迎您的反馈,以帮助我们改进!
注意:要报告 Go 项目中的漏洞,请参阅 Go 安全策略。
架构

Go 中的漏洞管理包括以下高级组件
- 一个数据管道从各种来源收集漏洞信息,包括 美国国家漏洞数据库 (NVD)、GitHub Advisory Database 以及直接来自 Go 包维护者。
- 一个漏洞数据库使用来自数据管道的信息填充。数据库中的所有报告都经过 Go 安全团队的审查和整理。报告以开放源代码漏洞 (OSV) 格式进行格式化,并且可以通过API访问。
- 与 pkg.go.dev 和 govulncheck 的集成,使开发者能够在其项目中查找漏洞。 govulncheck 命令会分析您的代码库,并根据您的代码中哪些函数递归调用了易受攻击的函数,仅显示真正影响您的漏洞。Govulncheck 提供了一种低噪音、可靠的方式来查找您项目中的已知漏洞。
资源
Go 漏洞数据库
除了 Go 包维护者直接报告外,Go 漏洞数据库还包含来自许多现有来源的信息。数据库中的每个条目都经过审查,以确保漏洞的描述、包和符号信息以及版本详细信息准确无误。
有关 Go 漏洞数据库的更多信息,请参阅 go.dev/security/vuln/database,并通过 pkg.go.dev/vuln 在浏览器中查看数据库中的漏洞。
我们鼓励包维护者贡献有关其自身项目中公开漏洞的信息,并向我们发送建议,以减少摩擦。
Go 的漏洞检测
Go 的漏洞检测旨在为 Go 用户提供一种低噪音、可靠的方式来了解可能影响其项目的已知漏洞。漏洞检查已集成到 Go 的工具和服务中,包括新的命令行工具 govulncheck、Go 包发现网站,以及 VS Code 和 Go 扩展等主流编辑器。
要开始使用 govulncheck,请在您的项目目录中运行以下命令:
$ go install golang.org/x/vuln/cmd/govulncheck@latest
$ govulncheck ./...
要启用编辑器中的漏洞检测,请参阅编辑器集成页面中的说明。
Go CNA
Go 安全团队是CVE 编号权威机构。有关更多信息,请参阅 go.dev/security/vuln/cna。
反馈
我们非常希望您能通过以下方式为我们做出贡献和改进
常见问题解答
如何报告 Go 项目中的漏洞?
请通过电子邮件 security@golang.org 报告 Go 项目中的所有安全错误。有关我们的流程的更多信息,请阅读Go 安全策略。
如何将公开漏洞添加到 Go 漏洞数据库?
要请求将公开漏洞添加到 Go 漏洞数据库,请填写此表单。
如果一个漏洞已经公开披露,或者存在于您维护的包中(并且您已准备好公开披露),则该漏洞被认为是公开的。此表单仅适用于 Go 标准库、Go 工具链和 golang.org 模块之外的可导入 Go 包中的公开漏洞。
该表单还可用于请求新的 CVE ID。有关 Go CVE 编号权威机构的更多信息,请在此处阅读。
如何建议修改漏洞?
要建议修改 Go 漏洞数据库中现有报告,请在此填写表单。
如何报告 govulncheck 的问题或提供反馈?
请在Go 问题跟踪器上提交您的问题或反馈。
我在另一个数据库中发现了此漏洞。为什么它不在 Go 漏洞数据库中?
报告可能因各种原因被排除在 Go 漏洞数据库之外,包括相关的漏洞不在 Go 包中、漏洞存在于可安装的命令而不是可导入的包中,或者漏洞已被数据库中已存在的另一个漏洞所涵盖。您可以在此处了解有关 Go 安全团队排除报告原因的更多信息。如果您认为某个报告被错误地排除在 vuln.go.dev 之外,请告知我们。
为什么 Go 漏洞数据库不使用严重性标签?
大多数漏洞报告格式都使用“低”、“中”和“严重”等严重性标签来指示不同漏洞的影响,并帮助开发者确定安全问题的优先级。然而,出于几个原因,Go 避免使用此类标签。
漏洞的影响很少是普遍的,这意味着严重性指标通常会产生误导。例如,解析器中的崩溃可能是严重级别的漏洞,如果它用于解析用户提供的输入并且可以被利用进行拒绝服务攻击;但如果解析器用于解析本地配置文件,即使将其严重性标记为“低”也可能言过其实。
严重性的标记也必然是主观的。即使是CVE 项目也是如此,该项目提出了一个公式来分解漏洞的相关方面,例如攻击向量、复杂性和可利用性。然而,所有这些都需要主观评估。
我们认为,对漏洞的良好描述比严重性指标更有用。良好的描述可以详细说明问题是什么、如何触发以及消费者在确定对自身软件的影响时应考虑哪些因素。
如果您想与我们分享您对此话题的想法,请随时提交问题。