Go1.16.6 发布:又一个小问题引发安全 Bug

polaris · · 2027 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

大家好,我是 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 的时间可以看到: ![1.16.6.png](https://static.studygolang.com/210714/17bdc5de177623ec6aef0b4232a8d8cd.png) 大概率是代码的一个小问题引起的,好比之前有一次,我发了一篇文章:[快一个月,Go1.16 才发现了比较严重的 Bug,但这个 Bug 有点 Low。。。](https://mp.weixin.qq.com/s/AddZm8qaWBY-Hgexq6tWkA)看看这次的改动: ![1.16.6-1.png](https://static.studygolang.com/210714/1414694fb4fc85315216e94a773fa994.png) 进行类型断言,直接使用其结果,没有进行判断。除非能确保 cert.PublicKey 一定是 `*rsa.PublicKey`,否则应该使用 ok 式断言。从报的 issue 看,显然不能确保,似乎为了图省事,想一行代码搞定?大家在进行类型断言时,一定要注意此问题。 我在 Go 语言中文网为大家准备好了最新下载地址:<https://studygolang.com/dl>,也可以使用你喜欢的 Go 版本管理工具,比如 goup,或者按照官方的方式: ![go1.16.6.png](https://static.studygolang.com/210714/fc69bf5a24ea532faa8207f59f2a26cf.png)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2027 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传