Go 安全政策
概述
本文档说明了 Go 安全团队处理报告的问题的过程以及预期结果。
报告安全漏洞
Go 发行版中的所有安全漏洞都应通过电子邮件报告给 [email protected]。此邮件将发送给 Go 安全团队。
为确保您的报告不被标记为垃圾邮件,请在电子邮件的任何位置包含“漏洞”一词。请为您的报告电子邮件使用描述性的主题行。
我们将在 7 天内确认您的电子邮件,并在解决之前随时向您更新进度。您的问题将在 90 天内得到解决或公开。
如果您在 7 天内没有收到对您电子邮件的回复,请再次通过 [email protected] 与 Go 安全团队联系。请确保您的电子邮件中包含漏洞一词。
如果您在 3 天后仍未收到对您报告的确认,则您的电子邮件可能被标记为垃圾邮件。在这种情况下,请 在此处提交问题。选择“我想报告 Google 产品中的技术安全或滥用风险相关漏洞 (SQLi、XSS 等)”,并将“Go”列为受影响的产品。
跟踪
根据问题的性质,Go 安全团队会将问题归类为 PUBLIC、PRIVATE 或 URGENT 跟踪中的问题。所有安全问题都将颁发 CVE 编号。
Go 安全团队不会向安全问题分配传统的细粒度严重性标签(例如,CRITICAL、HIGH、MEDIUM、LOW),因为严重性很大程度上取决于用户如何使用受影响的 API 或功能。
例如,encoding/json
解析器中资源耗尽问题的影响取决于正在解析的内容。如果用户正在解析来自其本地文件系统的受信任 JSON 文件,则影响可能会较低。如果用户正在解析来自 HTTP 请求正文的不可信任意 JSON,则影响可能会大得多。
也就是说,以下问题跟踪表明安全团队认为问题有多严重和/或影响范围有多广。例如,对于许多用户来说,影响中等至重大的问题是此策略中的 PRIVATE 跟踪问题,而影响微不足道至轻微,或仅影响一小部分用户的问题是 PUBLIC 跟踪问题。
PUBLIC
PUBLIC 跟踪中的问题会影响小众配置,影响非常有限,或已经广为人知。
PUBLIC 跟踪问题标记为 Proposal-Security
,通过 Go 提议审查流程 公开修复 进行讨论,并回传到下一个计划的 次要版本(大约每月一次)。版本公告包括这些问题的详细信息,但没有预先公告。
过去 PUBLIC 问题的示例包括
- #44916:archive/zip:调用 Reader.Open 时可能会引发 panic
- #44913:encoding/xml:使用 xml.NewTokenDecoder 和自定义 TokenReader 时出现无限循环
- #43786:crypto/elliptic:P-224 曲线上的操作不正确
- #40928:net/http/cgi、net/http/fcgi:未指定 Content-Type 时出现跨站点脚本 (XSS)
- #40618:encoding/binary:ReadUvarint 和 ReadVarint 可以从无效输入中读取无限数量的字节
- #36834:crypto/x509:Windows 10 上的证书验证绕过
PRIVATE
PRIVATE 跟踪中的问题违反了已提交的安全属性。
PRIVATE 跟踪问题会在下一个计划的 次要版本 中修复,在此之前会一直保密。
在版本发布前三到七天,会向 golang-announce 发送预先公告,宣布即将发布的版本中存在一个或多个安全修复程序,以及这些问题是否影响标准库、工具链或两者,以及为每个修复程序保留的 CVE ID。
过去 PRIVATE 问题的示例包括
- #53416: path/filepath: Glob 中的堆栈耗尽
- #53616: go/parser: 所有 Parse* 函数中的堆栈耗尽
- #54658: net/http: 在发送 GOAWAY 后处理服务器错误
- #56284: syscall, os/exec: 环境变量中未经清理的 NUL
紧急
紧急跟踪问题是对 Go 生态系统完整性的威胁,或者正在野外被积极利用,导致严重破坏。没有最近的示例,但它们将包括 net/http 中的远程代码执行,或 crypto/tls 中的实际密钥恢复。
紧急跟踪问题在私下修复,并且触发立即专门的安全版本,可能没有预先公告。
将现有问题标记为与安全相关
如果您认为现有问题与安全相关,我们要求您发送电子邮件至 [email protected]。电子邮件应包括问题 ID 和简要说明,说明为什么应根据此安全策略处理该问题。
披露流程
Go 项目使用以下披露流程
-
收到安全报告后,将指派一名主要处理人。此人负责协调修复和发布过程。
-
确认问题并确定受影响的软件列表。
-
对代码进行审核以查找任何潜在的类似问题。
-
如果经与提交人协商确定需要 CVE 编号,主要处理人将获取一个。
-
为最近的两个主要版本和 head/master 修订版准备修复程序。为最近的两个主要版本准备修复程序,并合并到 head/master。
-
在应用修复程序的当天,将公告发送到 golang-announce、golang-dev 和 golang-nuts。
此过程可能需要一些时间,尤其是在需要与其他项目的维护者协调时。我们将尽一切努力以尽可能及时的方式处理该错误,但是遵循上述流程以确保一致处理披露非常重要。
对于包括分配 CVE 编号的安全问题,该问题将在 CVEDetails 网站上的“Golang”产品以及国家漏洞披露网站上公开列出。
接收安全更新
接收安全公告的最佳方式是订阅 golang-announce 邮件列表。任何与安全问题相关的邮件都将以 [security]
为前缀。
对本政策的评论
如果您有任何改进本政策的建议,请 提交一个问题 以供讨论。