## FreeBSD 中的 CVE-2026-4247 漏洞:TCP 挑战 ACK 处理过程中的 mbuf 泄漏
FreeBSD 团队于 2026 年 3 月 26 日发布了 CVE-2026-4247 的详细信息——这是一个可以通过 TCP 连接中的 mbuf 泄漏实现远程 DoS 攻击的漏洞。该问题影响已建立连接中意外 TCP 段的处理。
TCP 协议在接收到意外数据包时会生成挑战 ACK,以验证其合法性。生成速率受 sysctl 参数限制:net.inet.tcp.ack_war_timewindow(默认 1000 ms)和 net.inet.tcp.ack_war_cnt(5)。在此时间窗口内,仅处理前 5 个数据包,其余忽略。
tcp_subr.c 中的 tcp_respond() 函数会构建挑战 ACK 并消耗一个 mbuf。如果不需要该 ACK,则释放 mbuf。攻击者通过伪造数据包,会导致超出限制的数据包丢失 mbuf——每个数据包丢失一个。
所有 FreeBSD TCP 堆栈均受影响:基础堆栈、RACK、BBR。基础堆栈会发送更多 ACK,从而放大攻击效果。
攻击向量和利用条件
攻击在以下条件下可能实现:
- 位于 TCP 连接路径上(MITM)。
- 向目标建立自己的连接。
外部攻击者必须猜测 IP 地址、端口和序列号来进行伪造。由于复杂度高,成功率较低。
每个超出限制(5 个/秒)的伪造数据包都会导致一个 mbuf 泄漏,从而耗尽 mbuf 池并引发 DoS。
临时保护措施
禁用 ACK 速率限制:
sysctl net.inet.tcp.ack_war_timewindow=0
将其添加到 /etc/sysctl.conf 以实现持久化。
此措施可消除泄漏,但会因处理所有数据包而增加 CPU 负载。
永久修复和分支
更新到已应用补丁的分支(提交和修订):
- stable/15/ 1fddb5435315 (stable/15-n282699)
- releng/15.0/ de9e5d82581e (releng/15.0-n281011)
- stable/14/ b45e7530ffb9 (stable/14-n273839)
- releng/14.4/ 44dd8b58394b (releng/14.4-n273676)
- releng/14.3/ a9cba5321021 (releng/14.3-n271476)
FreeBSD 发布计划
FreeBSD 15.0 于 2025 年 12 月 2 日发布。分支支持期缩短至 4 年,每 2 年推出新分支。每分支每 6 个月发布中间版本,总周期为 3 个月,同时并行开发两个分支。
FreeBSD 14.4 于 2026 年 3 月 10 日发布。14.x 分支是 32 位平台的最后一个。FreeBSD 15+ 仅支持 64 位,并为遗留应用提供 COMPAT_FREEBSD32 兼容性。
关键点
- 漏洞可通过 TCP 数据包伪造远程利用,导致 mbuf 耗尽。
- 影响所有 FreeBSD TCP 堆栈;默认 ACK 限制会放大泄漏。
- 临时修复:
sysctl net.inet.tcp.ack_war_timewindow=0(以增加 CPU 使用率为代价)。 - 补丁已合并至 stable/15、releng/15.0、stable/14 和 releng/14.x。
- FreeBSD 14.x 标志着 32 位支持结束;请迁移至 64 位。
— Editorial Team
暂无评论。