Go1.20.5 和 Go1.19.10 发布

行业动态 · 浏览次数 : 276 · 发布时间 : 2023-07-17 15:52:37

近日,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,因此不受影响)