近日,安全圈被一枚潜伏长达13年的Linux内核漏洞搅动不安。该漏洞代号OVSwrap(编号 CVE-2026-64531,CVSS评分7.8),存在于内核的Open vSwitch(OVS)数据通路组件中。它允许任何普通本地用户,在绝大多数默认配置的Linux发行版上直接获得root权限。
这是一场由 “逻辑错误”*驱动的内存破坏——安全研究员Asim Manizada将其形容为 “拥有逻辑漏洞级可靠性的内存破坏”。
漏洞根源要追溯到OVS内核模块处理Netlink属性长度时的历史设计缺陷。内部动作流中,单个嵌套属性的长度字段仅有16位(最大65535字节)。但在早期代码中,内核会限制整个生成的动作流不超过32 KiB,这个“隐形天花板”恰好掩盖了长度溢出的风险。
时间来到2025年3月,内核维护者为解决大型OpenStack环境中不可预测的故障,移除了这个32 KiB的限制。谁承想,这一看似合理的优化,直接让沉睡13年的长度溢出漏洞瞬间“可触发”。
攻击者只需提交一个包含数百个小型conntrack动作的合法 CLONE 动作,内核就会不断展开这些动作,直到生成的内部数据超过65535字节。此时,16位的 `nla_len` 字段发生整数回绕,变为一个极小值。后续解析代码信任这个错误长度,从缓冲区中间位置继续解析——而conntrack数据中的标签和超时名称恰好由攻击者控制,伪造的动作头部可以精确布局在解析恢复点。
无需堆风水,无需内存 spraying,仅凭确定性偏移即可完成劫持。
OVSwrap的利用链展现出惊人的工程化程度,攻击者通过上述回绕可连续完成三个关键原语:
1. 内核指针泄露:通过伪造的 OUTPUT 动作,获取关键内核结构地址,绕过KASLR。
2. 任意内核读取:利用伪造的隧道 SET 动作,越界读取敏感内存。
3. 精确递减劫持:通过销毁伪造的隧道目标指针,对关键数据结构进行定向减一操作,最终修改当前进程的 uid/gid为0。
PoC(概念验证)会进一步篡改 `/etc/sudoers` 或相关配置,直接弹出root shell。整个过程稳定、可重复,且为了稳定性,攻击完成后刻意保留进程和OVS状态,不做危险清理。
该漏洞最令人不安之处在于其极低的利用门槛:
- 攻击者不需要系统中存在已有的OVS网桥、不需要运行 `ovs-vswitchd` 守护进程,更不需要主机级别的 `CAP_NET_ADMIN`。
- 只需利用非特权用户命名空间(`unshare -Urn`)创建新网络命名空间,即可在该命名空间内获得 `CAP_NET_ADMIN` 权限,从而创建私有OVS数据通路。
默认启用非特权用户命名空间的发行版全线告急。根据研究员公布的信息,以下发行版在默认配置下均可被成功利用(部分需特定绕过):
Red Hat系:AlmaLinux 8/9/10、CentOS Stream 9/10、Rocky Linux 9/10、Fedora 42~44
Debian系:Debian 12/13、Ubuntu 22.04(24.04需AppArmor绕过,26.04默认阻断但可关闭限制后利用)
其他:Arch、Alpine 3.22~3.24、Amazon Linux 2023、Kali 2026.1、Linux Mint 22.3、NixOS、openSUSE Tumbleweed、Pop!_OS
Ubuntu 24.04 通过AppArmor阻止直接命名空间创建,但PoC中已包含 `aa-exec` 备选绕过路径;Ubuntu 26.04虽默认阻断,一旦管理员禁用AppArmor限制,同样沦陷。
上游主线补丁已于7月24日合入稳定树,各大厂商正在加紧推送更新内核。如果你的系统尚未收到补丁,请根据场景立即采取措施:
资讯来源:本文基于安全研究员 Asim Manizada 公开的技术报告及 CVE-2026-64531 相关社区讨论整理编译。