Go 1.26.6/1.25.13 安全修复:KeyUpdate 打满 CPU,IDNA 误判可提权
Go 1.26.6 和 1.25.13 于 2026-08-13 发布,共 10 个安全修复。下面三个容易被外部输入触发、自建服务常踩的漏洞值得先看。
crypto/tls:KeyUpdate 无限握手(CVE-2026-56862)
握手消息状态机实现有缺陷,过去无论握手是否完成,都把 KeyUpdate 当作可推进状态的消息处理。恶意客户端可不停发送 KeyUpdate,迫使服务端反复执行密钥派生,CPU 被打满,等价于 DoS。
- 修复:对握手完成后仍愿意接收的握手消息数量做限制。
- 影响范围:
Conn.Handshake、Read/Write、Dial系列、QUICConn。 - 关联 issue:go.dev/issue/80528。
net/url:resolvePath 处理 .. 段变成二次复杂度(CVE-2026-56860)
原实现对每步路径都对整条字符串做转换和缓冲重写,路径越长,耗时越接近平方增长,内存分配也会放大。修复后改为字节缓冲上下标回溯,复杂度回到线性。
- 关联 issue:go.dev/issue/80494。
- 建议:拿用户输入拼 URL 再调用
ResolveReference的服务需要重点测。
x/net/idna:ASCII-only Punycode 被错误接受(CVE-2026-39821)
ToUnicode("xn--example-.com") 会返回 example.com,而不是报错。这是 UTS46 老规范缺陷,Rev33 修复。程序如果先用 ASCII 主机名做权限判断、之后再转 Unicode,会间接放行同名域名,属于提权。
- 关联 issue:go.dev/issue/78760。
升级与自查
升级地址在 https://go.dev/dl/ ,源码升级可执行 git checkout go1.26.6。
本次同时修了 sumdb tile 校验绕过(CVE-2026-56865/56864)。官方自查命令:
rm -r go.sum go.work.sum vendor/ && go mod tidy
修复优先级建议:TLS 服务端 > 域名鉴权 > URL 解析。