Go1.16.6 发布:又一个小问题引发安全 Bug
2021-07-13 19:12:00 Author: mp.weixin.qq.com(查看原文) 阅读量:180 收藏

阅读本文大概需要 5 分钟。

大家好,我是 polarisxu。

今早,Go 官方发布了 Go1.16.6 和 Go1.15.14,这是两个小版本,主要修复安全漏洞。因此,如果你的代码可能涉及到,建议进行升级。

crypto/tls clients can panic when provided a certificate of the wrong type for the negotiated parameters. net/http clients performing HTTPS requests are also affected. The panic can be triggered by an attacker in a privileged network position without access to the server certificate's private key, as long as a trusted ECDSA or Ed25519 certificate for the server exists (or can be issued), or the client is configured with Config.InsecureSkipVerify. Clients that disable all TLS_RSA cipher suites (that is, TLS 1.0–1.2 cipher suites without ECDHE), as well as TLS 1.3-only clients, are unaffected.

当为协商的参数提供了错误类型的证书时,crypto/tls 客户端可能会 panic。net/http 客户端执行 HTTPS 请求也会受到此影响。攻击者可以在有特权的网络位置,不访问服务器证书的私钥的情况下触发该 panic,只要是受信任的服务器的 ECDSA 或 Ed25519 证书存在 (或者可以颁发),或者客户端配置有 Config.InsecureSkipVerify。我想不少客户端可能都配置了 Config.InsecureSkipVerify,所以需要引起注意。

这个漏洞发现后,官方紧急修复并发版,从这个 issue 的时间可以看到:

大概率是代码的一个小问题引起的,好比之前有一次,我发了一篇文章:快一个月,Go1.16 才发现了比较严重的 Bug,但这个 Bug 有点 Low。。。看看这次的改动:

进行类型断言,直接使用其结果,没有进行判断。除非能确保 cert.PublicKey 一定是 *rsa.PublicKey,否则应该使用 ok 式断言。从报的 issue 看,显然不能确保,似乎为了图省事,想一行代码搞定?大家在进行类型断言时,一定要注意此问题。

我在 Go 语言中文网为大家准备好了最新下载地址:https://studygolang.com/dl,也可以使用你喜欢的 Go 版本管理工具,比如 goup,或者按照官方的方式:


往期推荐

我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。

坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxNzY0NDE3NA==&mid=2247487611&idx=2&sn=ad58d84e931d43c24d4e0fa5e35ba275&chksm=9be33f9aac94b68c555e437804afed4c844eb94510c350c878095724fe0d2d58ff384786c16d#rd
如有侵权请联系:admin#unsafe.sh