CVE-2026-42511:FreeBSD dhclient 中的 21 年历史根 RCE

FreeBSD 长期以来一直被视为现存最安全的操作系统之一,为 Netflix、Sony 等巨头以及众多网络硬件厂商提供关键基础设施。然而,最近发现的漏洞 CVE-2026-42511 揭示了一个已存在超过二十年的关键安全缺口。

该漏洞由 AISLE 发现,允许以 root 权限进行远程命令执行(RCE)。该缺陷尤其危险,因为它可以被同一局域网内的任何系统“蠕虫化”,将标准的网络配置过程转变为完整系统被攻陷的向量。

问题根源:二十年的遗留

该漏洞存在于 dhclient(FreeBSD 的 DHCP 客户端)中。该缺陷最早出现在 2005 年 FreeBSD-6.0 发行时,当时 dhclient 实现是从 OpenBSD 移植而来。虽然 OpenBSD 在 2012 年最终废弃了有问题的 dhclient-script——从而实际上中和了该威胁,但代码仍保留在 FreeBSD 中,长期处于休眠且未被发现,直至如今。

从本质上看,CVE-2026-42511 是一个逻辑缺陷,涉及对攻击者可控的协议数据未进行适当的清理。该数据被持久化到受信任的配置文件中,随后在特权执行路径中被重新解释。

技术细节:从数据包到根权限

1. 被污染的租约文件

dhclient 收到 DHCP 回复时,它会将租约信息写入本地文件(通常为 /var/db/dhclient.leases.<if>)。负责此操作的函数 write_client_lease() 使用 fprintf 序列化数据。虽然大多数字段会被清理或限制为有效的 IP 地址,但来自引导协议(BOOTP)的两个特定字段会原样写入:

  • lease->filename
  • lease->server_name

由于这些字段未进行转义,攻击者可以注入双引号、换行符和分号。例如,恶意 DHCP 服务器可以发送一个 file 字段,内容为:"; medium ";id>/tmp/pwned

dhclient 将其写入租约文件时,会跳出 filename 字符串并注入一个新的 medium 指令。生成的租约文件在语法上仍然有效,但已包含恶意负载:

lease {
  interface "em1";
  fixed-address 192.168.100.50;
  next-server 192.168.100.2;
  filename "";
  medium ";id>/tmp/pwned";
}

2. 特权执行入口

利用的第二阶段发生在 dhclient 调用 /sbin/dhclient-script 应用网络配置时。该脚本以 root 身份执行,并包含一个危险的 eval 语句:

eval "$IFCONFIG $interface $medium"

当在租约续订或系统重启期间重新解析受污染的租约文件时,注入的 medium 值会传入此 eval 入口。系统最终执行的命令变为:

eval "/sbin/ifconfig -n em1 ;id>/tmp/pwned"

这导致命令 id > /tmp/pwned(或任何其他任意命令)以完整的 root 权限执行。

攻击面

该漏洞对任何能够在同一广播域内运行或伪造 DHCP 服务器的攻击者都极易利用。包括:

  • 有线网络: 同一局域网段上的恶意设备。
  • 无线网络: 恶意 Wi‑Fi 接入点或同一 Wi‑Fi 网络中能够注入 DHCP 流量的攻击者。

随着 FreeBSD 越来越重视笔记本支持和 Wi‑Fi 兼容性,用户在咖啡店、机场等公共场所连接不受信任网络时的风险也随之上升。

社区视角与批评

此发现引发了对 FreeBSD 网络栈架构选择的讨论。一些观察者指出,对关键网络协议使用临时文件序列化——而非 JSON、TOML 或 SQLite 等结构化格式——并在数据路径上放置 shell eval 调用,本质上是一种高风险的设计模式。

“在 … 关键的 DHCP 之类的数据路径上使用 shell 功能似乎是一个糟糕的选择。认为在此处使用 shell eval 合适,这种糟糕的决定甚至会对整个系统产生负面影响。”

利用链概述

  1. 注入: 恶意 DHCP 服务器发送构造的 BOOTP file 字段。
  2. 持久化: dhclient 将未转义的字符串写入租约数据库。
  3. 重新解析: 系统随后读取受污染的租约文件,将注入的 medium 指令视为可信状态。
  4. 执行: dhclient 将恶意的 medium 值传递给 /sbin/dhclient-script
  5. 妥协: 脚本中的 eval 命令以 root 身份执行攻击者的负载。

结论

CVE-2026-42511 明显提醒我们,即使是以安全著称的系统,遗留代码也可能潜藏数十年的关键漏洞。未转义的序列化与特权 eval 入口的组合为获取 root 权限提供了一条极其简易的路径。FreeBSD 已在 advisory FreeBSD-SA-26:12.dhclient 中发布修复,强烈建议用户立即更新系统。

Sources