Go1.20.5 发布:更新了什么?
2023-6-10 22:11:10 Author: Go语言中文网(查看原文) 阅读量:32 收藏

点击上方蓝色“Go语言中文网”关注,每天一起学 Go

近日,Go 官方发布了两个新版本 1.20.5 和 1.19.10。这两个版本包含了三个安全修复,如下:

  • cmd/go: cgo 代码注入
    • 当使用 cgo 时,go 命令可能在构建时生成意外的代码,导致运行一个使用 cgo 的 go 程序时出现意外的行为。这可能发生在运行一个包含有换行符的目录名的不可信模块时。使用 go 命令获取的模块(即通过"go get")不受影响(使用GOPATH模式获取的模块,即GO111MODULE=off,可能受影响)。issue https://go.dev/issue/60167。
  • runtime: setuid/setgid 二进制文件的意外行为
    • Go 运行时在一个二进制文件设置 setuid/setgid 位时没有做任何不同的处理。在 Unix 平台上,如果一个 setuid/setgid 二进制文件在执行时标准输入/输出文件描述符被关闭,打开任何文件可能导致以提升的权限读写意外的内容。类似地,如果一个 setuid/setgid 程序被终止,无论是通过 panic 还是信号,它可能泄露它的寄存器内容。issue https://go.dev/issue/60272。
  • cmd/go: LDFLAGS 的不恰当处理
    • 当使用 cgo 时,go 命令可能在构建时执行任意代码。这可能发生在运行"go get"获取一个恶意模块时,或者运行任何其他构建不可信代码的命令时。这可以通过链接器标志触发,通过 "#cgo LDFLAGS" 指令指定。issues https://go.dev/issue/60305 和 https://go.dev/issue/60306。

可以使用官方推荐的方式升级试用:

也可以用自己喜欢的方式升级,比如我喜欢用 goup 安装升级,或到 Go 语言中文网下载最新的包:https://studygolang.com/dl

不过,这两个版本发布后,Ian Lance Taylor 指出,由于一个不幸的错误,这个变化会破坏使用 -compiler=gccgo 时"#cgo LDFLAGS" 指令的使用。大多数使用 gccgo 或 GoLLVM 的人使用的是与这些工具一起分发的 cmd/go,它不受影响。因此,我们将在下一个小版本中修复这个问题。当前的小版本 1.20.5 和 1.19.10 对于使用gccgo或GoLLVM的一些情况不幸地出现了问题。对于这次失误,官方深表歉意。(大部分人不会使用 gccgo,因此不受影响)


推荐阅读

福利
我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMTA4Njc0OQ==&mid=2651454436&idx=1&sn=047dad627bad95eead483aa7e656e8cf&chksm=80bb2516b7ccac00ea91692d862d76f6df1f2fb32a99d23da9dddc6a96ffbfa602cd3be3b758#rd
如有侵权请联系:admin#unsafe.sh