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

polaris · 2021-07-14 20:58:14 · 2418 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-07-14 20:58:14 的主题,其中的信息可能已经有所发展或是发生改变。

大家好,我是 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

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

1.16.6-1.png

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

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

go1.16.6.png


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

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

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