Go 1.24 起监听端口默认开 MPTCP:CVE-2026-98432 该怎么应对
来源:groups.google.com — 2026-10-30
📋 概述
Linux 内核 IPv4 TCP 的 use-after-free(CVE-2026-98432,CVSS 9.8)被 Anthropic 演示成对暴露 MPTCP 监听端口的零点击远程 root;而 Go 1.24 起 listen socket 默认启用 MPTCP,于是每个用新版 Go 编译的 HTTP/gRPC 服务都自动满足了这个前提。Go 团队的建议很明确:升级内核。临时缓解可以设 GODEBUG=multipathtcp=0 或 go.mod 里加 godebug multipathtcp=0,但那是脆弱的,因为底层 bug 与 MPTCP 无关。
🔑 核心要点
- 根因在 tcp_v4_syn_recv_sock() 把 ireq_opt 的所有权转给子 socket 却未复制,另一颗 CPU 仍在 RCU 读,ip_options_build() 读到了已释放内存。
- 修复是把 inet_sock_destruct() 与 tcp_v4_reqsk_destructor() 改用 kfree_rcu(),已进 6.12.113 / 6.18.56 / 7.2.10 / 7.3。
- Go 1.24 把 multipathtcp 默认值从 "0" 改成 "2"(只在监听 socket 上开),普通客户端仍走 TCP,所以很难被察觉。
- 缓解手段:运行期 GODEBUG=multipathtcp=0,或构建期在 go.mod 写 godebug multipathtcp=0,也可用 SetMultipathTCP 逐 socket 控制。
- Go 团队认为现在就改默认值为时过早,讨论放在 go.dev/issue/82717。
💡 金句
The best fix for this vulnerability is to upgrade to a patched kernel version.
👍 0
👎 0
← 返回 Lobsters 首页