Go 安全策略
概览
本文档说明了 Go 安全团队处理报告问题以及您期望得到的回应的过程。
报告安全漏洞
Go 发行版中的所有安全漏洞都应通过电子邮件发送至 security@golang.org。此邮件将发送给 Go 安全团队。
为确保您的报告不被标记为垃圾邮件,请在您的电子邮件中包含“vulnerability”一词。请为您的报告邮件使用描述性的主题行。
您的电子邮件将在 7 天内得到确认,并且您将及时了解进展情况,直至问题解决。您的问题将在 90 天内得到修复或公开。
如果您在 7 天内未收到电子邮件回复,请再次与 Go 安全团队联系 security@golang.org。请确保您的电子邮件中包含vulnerability一词。
如果您在 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
URGENT
URGENT 跟踪的问题威胁到 Go 生态系统的完整性,或正在野外被积极利用并导致严重损害。目前没有近期示例,但它们将包括 net/http 中的远程代码执行,或 crypto/tls 中的实际密钥恢复。
URGENT 跟踪的问题将私密修复,并触发立即的专门安全发布,可能不会提前公告。
将现有问题标记为与安全相关
如果您认为现有问题与安全相关,我们要求您发送电子邮件至 security@golang.org。电子邮件应包含问题 ID 和简要说明,解释为什么应根据此安全策略处理该问题。
披露流程
Go 项目使用以下披露流程:
-
收到安全报告后,将指派一名主要处理者。此人负责协调修复和发布流程。
-
确认问题并确定受影响的软件列表。
-
审计代码以查找任何潜在的类似问题。
-
如果与提交者协商后确定需要分配 CVE 编号,则主要处理者将获取一个。
-
为最近两个主要版本和 head/master 修订版准备修复程序。为最近两个主要版本准备修复程序,并将其合并到 head/master。
-
在应用修复程序的日期,将向 golang-announce、golang-dev 和 golang-nuts 发送公告。
此过程可能需要一些时间,尤其是在需要与其他项目维护者协调的情况下。我们将尽一切努力以尽可能及时的方式处理此漏洞,但是,遵循上述流程以确保披露得到一致处理非常重要。
对于包含 CVE 编号分配的安全问题,该问题将在 CVEDetails 网站的“Golang”产品以及国家漏洞披露网站上公开列出。
接收安全更新
接收安全公告的最佳方式是订阅 golang-announce 邮件列表。任何与安全问题相关的消息都将以 [security]
开头。
对此策略的评论
如果您有任何改进此策略的建议,请提交问题进行讨论。