[安全] Golang 1.14.5 和 Golang 1.13.13 版本已发布

[安全] Golang 1.14.5 和 Golang 1.13.13 版本已发布 各位Gopher,

我们刚刚发布了Go 1.14.5和Go 1.13.13,以解决两个最近报告的安全问题。我们建议所有用户更新到这些版本之一(如果不确定选择哪个,请选择Go 1.14.5)。

  • 某些net/http服务器(包括ReverseProxy)中的数据竞争

    处理程序并发读取请求体并写入响应的服务器可能会遇到数据竞争并崩溃。httputil.ReverseProxy处理程序会受到影响。 感谢Mikael Manukyan、Andrew Kutz、Dave McClure、Tim Downey、Clay Kauzlaric和Gabe Rosenhouse报告此问题。 此问题是CVE-2020-15586,Go问题为golang.org/issue/34902

  • Windows上X.509验证忽略提供的EKU

    在Windows上,如果VerifyOptions.Roots为nil,Certificate.Verify不会检查VerifyOptions.KeyUsages中指定的EKU要求。 感谢Niall Newman报告此问题。 此问题是CVE-2020-14039,Go问题为golang.org/issue/39360

即将发布的Go 1.15rc1版本也将包含上述修复。

我们还要感谢Andy Lindeman,他报告了pkg.go.dev中的一个跨站脚本漏洞和一个CSP绕过问题,现已修复。

所有支持平台的下载可在所有版本 - Go编程语言获取。

谢谢,

代表Go团队的Katie和Filippo


更多关于[安全] Golang 1.14.5 和 Golang 1.13.13 版本已发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于[安全] Golang 1.14.5 和 Golang 1.13.13 版本已发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这两个安全更新确实非常重要,所有使用Go的开发者都应该立即升级。以下是两个问题的技术细节和示例:

1. net/http 数据竞争问题 (CVE-2020-15586)

这个问题影响所有并发读取请求体并写入响应的服务器。httputil.ReverseProxy 是受影响最明显的组件。在修复前,以下代码可能存在数据竞争:

// 有问题的示例(1.14.5/1.13.13之前)
func handler(w http.ResponseWriter, r *http.Request) {
    // 并发读取请求体
    go func() {
        body, _ := io.ReadAll(r.Body)
        // 处理body...
    }()
    
    // 同时写入响应
    w.Write([]byte("processing request"))
}

修复后的版本确保了请求体和响应写入之间的同步。如果你在使用 ReverseProxy,升级后不需要修改代码,但如果你有自定义的并发处理逻辑,应该检查是否存在类似模式。

2. Windows X.509 EKU 验证问题 (CVE-2020-14039)

在Windows平台上,当使用系统证书池时,EKU(扩展密钥用法)验证被忽略。修复前的问题示例:

// 有问题的验证(1.14.5/1.13.13之前)
cert, _ := x509.ParseCertificate(certData)
opts := x509.VerifyOptions{
    KeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
    // Roots 为 nil,使用系统证书池
}
// 在Windows上,即使证书不是服务器身份验证证书,验证也可能通过
chains, err := cert.Verify(opts)

修复后,Windows上的验证现在会正确检查指定的 KeyUsages。如果你的应用依赖特定的EKU验证,升级后验证会更加严格。

升级建议:

# 下载并安装 Go 1.14.5
wget https://golang.org/dl/go1.14.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.5.linux-amd64.tar.gz

# 验证版本
go version
# 应该输出: go version go1.14.5 linux/amd64

对于生产环境,建议在测试环境中验证应用兼容性后尽快升级。这两个修复都涉及核心的安全功能,特别是对于暴露在公网的HTTP服务和依赖证书验证的应用。

回到顶部