Go Team 又发布了 Go 1.15.5 和 Go 1.14.12,以解决最近报告的安全问题。建议所有用户更新到以下版本之一(如果不确定哪个版本,请选择 Go 1.15.5)。
- math/big: 大数据递归除法时出现 panic。当提供精心设置的大数输入时,许多 math/big.Int 方法(Div,Exp,DivMod,Quo,Rem,QuoRem,Mod,ModInverse,ModSqrt,Jacobi 和 GCD)可能会 panic。为了避免发生 panic,除数或模参数必须大于 3168 位(在 32 位体系结构上)或 6336 位(在 64 位体系结构上)。多个 math/big.Rat 方法也受到类似的影响。
当提供精心审设置的公钥和签名时,crypto/rsa.VerifyPSS,crypto/rsa.VerifyPKCS1v15 和 crypto/dsa.Verify 可能会崩溃。仅当使用具有异常大的字段大小(比最大支持曲线 P-521 大几倍)的自定义 CurveParam 时,crypto/ecdsa 和 crypto/elliptic 操作才可能受到影响。在精心制作的 X.509 证书链上使用 crypto/x509.Verify 可能会导致 panic,即使证书没有链接到受信任的根。可以通过 crypto/tls 连接将链交付给客户端,或接受和验证客户端证书的服务器。可以通过 HTTPS 服务器使 net/http 客户端崩溃,而接受客户端证书的 net/http 服务器将 recover panic 并且不受影响。
此外,在 X.509 证书请求上或在 golang.org/x/crypto/otr 对话期间,调用 crypto/x509.(*CertificateRequest).CheckSignature 的应用程序可能会崩溃。解析 golang.org/x/crypto/openpgp 实体或验证签名可能会崩溃。最后,由于主机密钥格式错误,golang.org/x/crypto/ssh 客户端可能会崩溃,而如果 PublicKeyCallback 接受格式错误的公钥,或者 IsUserAuthority 接受了格式错误的证书,则服务器可能会崩溃。
相关 issue 见:<https://github.com/golang/go/issues/42552>。
- cmd/go:通过 cgo 在构建时执行任意代码。当使用 cgo 时,go 命令可以在构建时执行任意代码。当在恶意软件包上运行 go get 或生成不可信代码的任何其他命令时,可能会发生这种情况。这可能是由于通过 #cgo 指令指定的恶意 gcc 标志或链接的目标文件中的恶意符号名称引起的。相关 issue:<https://github.com/golang/go/issues/42556>、<https://github.com/golang/go/issues/42559>
如果你的项目中可能有上面的情况,建议你升级下版本。注意,因为 Go 每次只维护最近的两个版本,很多 bug 在之前的版本也是存在的,但官方并没有在旧版本中解决它们。
这里可以[下载最新版本](https://studygolang.com/dl)
有疑问加站长微信联系(非本文作者)