数百万美元的防御策略通常依赖于核心操作系统内核是一个静态、不可逾越的保险库这一假设。我们花费数年时间完善防火墙规则、身份提供者和终端检测脚本,然而架构基础往往仍然是最脆弱的组件。Linux 使用一种称为写时复制(copy-on-write,COW)的优化来管理内存效率。该系统确保多个进程共享相同的物理内存,直到其中一个进程需要修改它。在那个时间点,内核应该创建一个私有副本,以防止更改影响其他用户。在 CVE-2026-31635 的案例中,这一基本承诺失效了。
我花了最后 48 小时审查为 DirtyDecrypt(也称为 DirtyCBC)发布的概念验证代码。该漏洞是架构悖论的一个教科书级案例。正是旨在提高 Linux 内核速度和内存效率的机制,却允许非特权用户覆盖 root 拥有的文件。这是我们在短短三个月内看到的这一特定内存损坏逻辑的第三个主要变体。它让我想起了一艘船,其船壳从外部看是坚不可摧的,但一旦接触到内部燃料就会溶解。
缺陷存在于 rxgk_decrypt_skb 函数中。这段代码处理网络栈接收端传入套接字缓冲区的解密。当内核处理这些缓冲区时,它会处理有时与其他进程的页面缓存共享的内存页。在正常情况下,Linux 内核在对共享页进行任何写入之前都会触发写时复制操作。这可以防止一个进程的数据渗入另一个进程的内存空间。
Zellic 的研究人员发现 rxgk_decrypt_skb 缺乏这种 COW 保护。当内核将数据解密到恰好是共享页的缓冲区时,它会直接将解密后的内容写入物理内存,而不会先创建私有副本。这绕过了标准的文件系统权限和内存保护。攻击者可以将敏感文件(如 /etc/shadow)或 SUID 二进制文件映射到其内存空间,然后利用易受攻击的网络路径强制内核将数据写入该文件的页面缓存。一旦内核将页面缓存刷新到磁盘,修改就会变成永久性的。
DirtyDecrypt 并非孤立事件。它是始于 2026 年 4 月 Copy Fail (CVE-2026-31431) 的一系列漏洞家族的后代。Theori 的研究人员首先发现内核中的加密套接字接口存在类似的逻辑缺陷。一周后,Dirty Frag 出现。紧随其后的是针对 XFRM 子系统的 Fragnesia。这些漏洞中的每一个都有相同的根本原因:在执行内核级写入之前未能验证页面所有权。
这一系列的披露突显了 Linux 内核处理现代网络内存优化方式中的系统性问题。MSG_SPLICE_PAGES 和其他高性能零拷贝机制的引入带来了复杂性,而当前的 COW 基础设施难以对其进行监管。名为 0xdeadbeefnetwork 的研究人员指出,一旦某个变体的修复程序进入公共代码树,将下一个变体武器化就成了安全专业人员的标准练习。这种 N-day 开发的快速循环提醒我们,一个子系统的补丁并不能保证另一个使用类似逻辑的子系统的安全。
CVE-2026-31635 的影响很大程度上取决于内核配置。该漏洞要求启用 CONFIG_RXGK 选项。这就是为什么像 Fedora、Arch Linux 和 openSUSE Tumbleweed 这样的发行版面临更高的风险。这些发行版通常青睐尖端功能和更广泛的硬件支持,其中包括启用了一些在 RHEL 或 Debian Stable 等更保守的企业版本中被禁用的专用网络和加密模块。
在云环境中,此漏洞对容器隔离构成了重大风险。如果工作节点运行易受攻击的内核,受损的容器可以使用 DirtyDecrypt 原语逃逸其本地环境。通过覆盖共享二进制文件或内核结构的页面缓存,攻击者可以从受限的 pod 移动到宿主机上的完全 root 访问权限。这有效地瓦解了 Kubernetes 和其他编排器依靠工作负载隔离所建立的多租户安全模型。
内核披露的数量迫使人们重新思考我们管理 Linux 安全的方式。著名的内核维护者 Sasha Levin 最近提议增加内核 Killswitch。该工具允许管理员在运行时禁用特定的内核函数而无需重启。如果像 DirtyDecrypt 这样的零日漏洞在特定的网络函数中被发现,管理员可以告诉内核停止执行该函数并返回一个固定值。这在永久补丁准备就绪之前,充当了船壳的紧急截止阀。
一些开发人员担心 Killswitch 本身的安全影响。如果攻击者获得了足够的权限来启动 Killswitch,理论上他们可以禁用安全模块或审计功能。然而,Linux 生态系统的现状是,补丁分发速度对于现代漏洞开发的速度来说太慢了。Killswitch 为那些无法等待新内核版本完整回归测试的组织提供了一种反应性措施。这是对我们的软件日益复杂以至于无法做到无错误这一事实的务实回应。
Rocky Linux 采取了不同的方法,引入了专门的安全存储库。传统上,下游发行版会等待上游供应商发布经过审核的补丁,然后再向其用户发送更新。当 PoC 已公开但官方更新仍卡在 QA 周期时,这会产生一个漏洞窗口。新的 Rocky Linux 安全存储库是一个可选功能,一旦紧急修复可用就立即发布,即使它们尚未进入主线内核。
此举引起了争议,因为它破坏了严格的上游兼容性。如果 Rocky Linux 团队修复了一个漏洞,而上游维护者后来选择了不同的修复方案,那么这两个内核将会分化。维护者承认这一风险,但认为保护用户比完美的版本对齐更重要。这反映了行业中一种更广泛的转变,即在面临活跃利用时优先考虑敏捷性。对于管理员来说,这意味着要在传统发布周期的稳定性和更积极的补丁策略的弹性之间做出选择。
防御 CVE-2026-31635 不仅仅需要标准更新。组织必须首先验证其系统是否易受攻击。检查内核配置中的 CONFIG_RXGK 是第一步。如果该模块已启用但您的工作负载不需要它,通过内核模块黑名单禁用它是最有效的即时缓解措施。在某些情况下,这完全消除了攻击面而无需重启。
从风险角度来看,您应该假设如果本地用户拥有 shell 访问权限,他们就有能力执行此 PoC。这使得对 /etc/ 目录和 SUID 二进制文件的严格监控变得至关重要。监控页面缓存完整性的现代安全工具可以在进程尝试通过非常规内存路径修改只读文件时发出警报。打补丁仍然是金标准,但在您的集群更新之前,限制性的 Seccomp 配置文件和 AppArmor 策略可以限制本地进程与易受攻击的网络函数交互的能力。
审核您的内核配置并验证您的发行版是否已发布 CVE-2026-31635 的修复程序。运行 Arch 或 Fedora 的组织应立即优先考虑这些更新。如果您管理大型 Linux 服务器集群,请考虑使用具有广泛功能集的内核的长期影响,并评估更精简、更稳固的内核配置是否适合您的安全态势。
免责声明:本文仅供信息和教育目的。它不能替代专业的网络安全审计或事件响应服务。提供的技术细节旨在帮助管理员了解风险并实施必要的防御措施。



