Go 1.27.4 和 1.26.11 修复 12 个安全漏洞,包括 Cgo 构建时代码执行漏洞
sec随谈
sec随谈
sec随谈
2026年11月12日 08:50
北京
去阅读
摘要
Go 团队于 2026 年 11 月 10 日发布了 Go 1.27.4 和 1.26.11,包含 12 项安全修复。其中 11 项 Go 安全修复针对工具链,用于阻止使用 cgo 的恶意软件包在开发者构建时执行代码。第十二项修复了 HTTP/1 服务器中的崩溃问题。
恶意 Go 软件包可能滥用 cgo 指令、链接器标志或精心构造的目标文件,在构建时执行代码。Go 1.27.4 和 1.26.11 堵住了这些缺口,并修复了 net/http 中的竞争条件。请升级您的 Go 工具链并重新构建。
重要性
开发者期望\"go build\"只是编译代码,而不是运行代码。然而,这些漏洞使恶意依赖项可以把一次构建变成在笔记本电脑或 CI 运行器上的代码执行。这构成了供应链风险。一个被投毒的模块就可能获取构建机密和签名密钥。
Go 安全团队在内部审计中发现了大部分问题。外部研究人员 Jakub Ciolek、Ali Sherif 和 GMO Flatt Security 的 RyotaK 报告了其余问题。目前尚未报告在野利用,CVE 记录也尚未给出 CVSS 评分。
攻击原理
不安全的 cgo 编译器和链接器标志
Go 允许软件包通过\"#cgo\"指令向 C 编译器传递标志,并通过允许列表进行过滤。但有几个标志绕过了过滤。例如,\"--sysroot\"和\"-target\"可使编译器指向攻击者控制的工具(CVE-2026-97033)。其他标志可使 GCC 加载不受信任的 spec 文件(CVE-2026-97034),或将文件写入任意文件夹(CVE-2026-97035)。
链接器脚本与插件手法
与此同时,被拆分的\"-Wl,”标志可将普通文件作为脚本交给链接器处理(CVE-2026-97037)。在 macOS 上,Apple 链接器会将\"-l\"和\"to\_library\"重新拼接为一个标志,从而\"在链接时加载任意 LTO 插件动态库\"(CVE-2026-97036)。
精心构造的目标文件与指令
恶意的\".syso\"文件和链接器输入也可能携带隐藏的链接器选项(CVE-2026-97038、CVE-2026-97040)。此外,团队还修复了通过 pkg-config 指令、\"//go:cgo\_\*”编译指示、Windows DLL 名称和转义引号进行的注入(CVE-2026-97039、CVE-2026-97041、CVE-2026-97042 和 CVE-2026-97043)。
HTTP/1 服务器崩溃
最后,CVE-2026-97054 影响 net/http。当 MaxBytesReader 达到限制时,它会在未加锁的情况下设置\"Connection: close\"头。因此,如果处理程序在读取请求体的同时写入响应头,服务器\"可能因运行时 panic 而崩溃\"。
受影响版本
- 1.26.11 之前的 Go 版本
- Go 1.27.0 至 1.27.3
应优先处理的对象
在 CI 中构建第三方代码的团队面临的风险最高。依赖 cgo 或依赖包含原生代码的项目也应尽快行动。同时,任何使用 MaxBytesReader 或 MaxBytesHandler 的 HTTP/1 服务都需要 net/http 的修复。这些 Go 安全修复适用于 Linux、macOS 和 Windows 构建,因为多个漏洞针对的是各平台的链接器。
要检查您的环境,请在每台构建主机上运行\"go version\"。另外,请检查每个 go.mod 文件中的\"toolchain\"行,因为它可能锁定了较旧的版本。
补丁与缓解措施
请从 Go 官方下载页面安装 Go 1.27.4 或 1.26.11,然后重新构建您的二进制文件。同时也要更新 CI 镜像和构建容器。在此之前,请审查使用 cgo 或附带\".syso\"文件的新依赖项,并考虑在可能的情况下使用 CGO\_ENABLED=0 进行构建。尽快应用这些 Go 安全修复,可同时保护开发者机器和流水线。
参考链接:
https://go.dev/dl/
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论