近日,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>。
可以使用官方推荐的方式升级试用:
![go1.20.5.png](https://static.golangjob.cn/230610/3232021856c85be782ce1c35c75f3a7d.png)
也可以用自己喜欢的方式升级,比如我喜欢用 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,因此不受影响)
有疑问加站长微信联系(非本文作者)