Go 1.26.9 / 1.27.2 修复 15 个安全漏洞:HTTP/2 服务可被远程打崩,ReverseProxy 对 CONNECT 改返 405
如果你的 Go 服务对外暴露 HTTP/2,或者用了 httputil.ReverseProxy 转发流量,这次补丁版本应当尽快升级:1.26 分支升到 go1.26.9,1.27 分支升到 go1.27.2。即使没有对外开 HTTP/2,multipart、Range、html/template 这几处修复与协议无关,同样建议跟上。
Go 1.27.2 和 Go 1.26.9(2026-10-08 发布)为 minor point release,包含 15 个安全修复,遵循 Go 安全策略。
15 个安全修复
HTTP/2 服务端 HPACK 编码器竞态(CVE-2026-97032,go.dev/issue/81867)。服务器会在两个 goroutine 中无同步地修改 HPACK 编码器:一个用它编码 HEADERS 帧,另一个在处理含
SETTINGS_HEADER_TABLE_SIZE的 SETTINGS 帧时改表大小。恶意客户端反复发请求并改表大小即可打崩服务器。修复:不再立即应用SETTINGS_HEADER_TABLE_SIZE,而是缓冲,下次写帧前才应用。报告者 RyotaK (GMO Flatt Security)。HTTP/2 Trailer 头导致内存耗尽(CVE-2026-78659,go.dev/issue/81857)。客户端发 Trailer 头时服务器用它填充
Request.Trailermap,每项都有内存开销;HTTP/2 下恶意客户端声明大量字段,可绕过Server.MaxHeaderValueCount与Server.MaxHeaderBytes造成内存暴涨(HTTP/1 不受影响)。修复:对 Trailer 声明字段套用这两个限制。crypto/tls 拒绝畸形 ECH outer extension 引用(CVE-2026-97031,go.dev/issue/81855)。RFC 9849 不允许重复的 ECH outer extension 引用,此前特制包可触发服务器进程内存耗尽,现在按畸形拒绝。
cmd/go:golang.org/fips140 校验和绕过(CVE-2026-94444,go.dev/issue/81833)。
cmd/go:golang.org/toolchain 校验数据库绕过(CVE-2026-94447,go.dev/issue/81834)。现在保证 golang.org/toolchain 总是联网取权威校验和。
html/template:连续模板表达式时上下文跟踪未重置(CVE-2026-94448,go.dev/issue/81821)。JS 模板字面量含连续表达式时,进入新表达式未正确重置上下文,后续正则字面量可能未被正确转义。
html/template:把
|yield|识别为 regexp 前导关键字(CVE-2026-97030,go.dev/issue/81823)。此前合法模板中的|yield|关键字可能未被正确转义。net/textproto、mime/multipart:解析 MIME 头时绕过内存限制(CVE-2026-94440,go.dev/issue/81741)。解析 multipart 表单时,若某个 part 开始时剩余限制小于 400 字节,可把任意长的一行读入内存;现在正确执行限制。报告者 Jakub Ciolek。
CONNECT 被拒后 HTTP/1 客户端连接不同步(CVE-2026-56866,go.dev/issue/81740)。
http.Transport发送带非空Request.Body的 HTTP/1 CONNECT 请求时,直接写 body 不加帧;若服务器以非 2xx keep-alive 拒绝 CONNECT,Transport 把连接放回空闲池,服务器可能把尾部 body 字节当成后续 pipeline 请求,池中连接不同步,下一个复用者会读到注入请求的响应。在共享 Transport 转发 CONNECT 的反向代理(含httputil.ReverseProxy)中可导致跨用户响应投毒。修复:HTTP/1 transport 发 CONNECT 后无论响应状态都关闭连接;ReverseProxy 现在对传入的 CONNECT 请求返回 405 Method Not Allowed(它从未有用处理过 CONNECT,不会转成双向隧道)。报告者 Xclow3n。HTTP/1 服务端在 2xx CONNECT 响应后连接不同步(CVE-2026-94439,go.dev/issue/81744)。handler 对 HTTP/1 CONNECT 回 2xx 后未 hijack 连接,服务器却继续从连接读请求,影响主要是请求走私(中间代理以为在隧道、服务器以为在 HTTP)。修复:服务器对 CONNECT 响应后总是关闭连接。报告者 Jakub Ciolek。
重复修改初始窗口导致过度 CPU 消耗(CVE-2026-78669,go.dev/issue/81742)。恶意 HTTP/2 对端开大量流,再发许多携带
SETTINGS_INITIAL_WINDOW_SIZE的小 SETTINGS 帧即可拉高 CPU。现在以 O(1)(而非 O(流数))处理初始窗口变化。HTTP/2 transport 接受畸形 framing 相关头(CVE-2026-78660,go.dev/issue/81115)。作为反代时可能把此类响应转发给 HTTP/1 客户端,客户端不够严格就会响应走私。现在 HTTP/2 transport 收到畸形 framing 头直接删除。报告者 TJ Barton。
os:Windows 上
Root.Mkdir(All)可跟随 junction 逃出 root(CVE-2026-56857,go.dev/issue/81739)。仅当最后一个路径分量是 junction 时触发,修复为不解析 junction。报告者 Daniele Ballarini。解析 Range 头无大小限制(CVE-2026-78667,go.dev/issue/81858)。大量小 range 会让
FileServer(FS)、ServeContent、ServeFile(FS)消耗过多 CPU。现在忽略含超过 200 个 range 的 Range 头,上限由新的 GODEBUG settinghttpservecontentmaxranges控制,GODEBUG=httpservecontentmaxranges=0关闭该限制。报告者 Jakub Ciolek。HTTP/2 服务端流重复返还流控(CVE-2026-78663,go.dev/issue/81743)。服务器可能对同一数据重复返还连接级流控,恶意客户端可借此绕过
MaxReceiveBufferPerConnection。现在对 reset 流等 handler 完成后再返还连接级流控。报告者 Ali Sherif。
升级方式
go install golang.org/dl/go1.26.9@latest
go1.26.9 download
1.27.2 同理,把版本号换成 go1.27.2。也可以在 go.mod 中用 toolchain 行指定。
发行说明:go.dev/doc/devel/release#go1.27.2;下载地址:go.dev/dl。