快速摘要

快速摘要

CVE-2026-31431

  • Fragnesia(也称 Copy Fail 3.0)是一个通用的 Linux 本地权限提升漏洞,允许非特权用户以 100% 的可靠性获取 root 权限。
  • 它利用了 XFRM ESP-in-TCP subsystem 中的一个逻辑错误,内核在 合并(coalescing) 过程中“忘记”了某个内存片段是共享的。
  • 通过操纵此缺陷,攻击者可以将任意字节写入只读文件(如 /etc/passwd 或 /usr/bin/su)的 页缓存,从而绕过安全检查并进入 root shell。

Fragnesia:让 Linux 获取 root 权限的内存漏洞

安全研究人员刚刚发现了一种接管 Linux 系统的新方法,名为 Fragnesia。该漏洞是 Dirty Frag 漏洞家族的最新成员。

由 William Bowling 和 V12 团队发现,Fragnesia 允许非特权用户以 100% 的可靠性获取 root 权限。

与许多依赖运气或时序的漏洞不同,Fragnesia 是一个 确定性的逻辑错误。这意味着它每次都能成功,对系统管理员来说堪称“噩梦”。

为什么叫 Fragnesia?

这个名字是“fragment”(片段)和“amnesia”(失忆)的组合。研究人员解释,核心错误在于网络缓冲区(称为 skb)在 合并 过程中 “忘记” 了某块内存是共享的。

当 Linux 内核试图通过合并网络数据包来节省时间时,它丢失了一个名为 SKBFL_SHARED_FRAG 的关键安全标记。没有这个标记,内核认为该内存是私有的且可以安全修改。但实际上,该内存仍然与 页缓存 中的敏感文件相关联。

从 Dirty Pipe 到 Fragnesia

Fragnesia 被称为 “Copy Fail 3.0”,因为它改进了从 Dirty Pipe 开始的一类漏洞。这些漏洞都有一个共同目标:将数据写入系统内存(RAM)中的 read-only 文件。

正如 技术文章 所述,Fragnesia 专门针对 ESP-in-TCP subsystem。通过诱使内核在共享内存上执行原地解密,攻击者可以“翻转”他们本应只能读取的文件中的字节,例如 /etc/passwd 或 /usr/bin/su。

漏洞工作原理

该漏洞利用了一个涉及 AES-GCM 加密 的巧妙技巧。以下是其接管系统的逐步过程:

  • 准备阶段: 攻击者通过改变一个称为 nonce 的值,构建一个“密钥流字节”的查找表。
  • Splice 触发: 漏洞利用 splice() 系统调用,将只读文件的页面直接植入网络套接字。
  • 内存 XOR: 通过选择完美的 nonce,攻击者迫使内核将特定字节 XOR 到缓存的文件页面中。
  • 构建 Shell: 这个过程逐字节重复,直到攻击者在内存中的 /usr/bin/su 二进制文件的前 192 字节上写入一个小的 root shell 存根。

一旦缓存中的“脏”二进制文件准备就绪,攻击者只需运行 su。内核执行修改后的版本,绕过所有安全检查,并将用户放入 root shell。

关于 Fragnesia 的一个令人惊讶的细节

如前所述,Fragnesia 漏洞通过使用基于 AES-GCM 计数器块构建的“密钥流查找表”,被设计为 完全确定性 的。

通过预先测试 65,536 个 nonce,攻击者可以创建一个映射,记录内核解密过程将 XOR 到目标文件中的每个可能的字节值。

这使得他们可以逐字节地将文件中的任何字节“翻转”为特定的期望值,而无需赢得任何竞争条件。

受 Fragnesia 影响的 Linux 发行版

如果您使用 Linux,很可能在影响范围内。研究人员确认,所有受原始 Dirty Frag 影响的版本也容易受到 Fragnesia 的攻击。这包括任何尚未应用 5 月 13 日,2026 发布的特定合并修复的内核。

主要发行版如 Ubuntu 已被确认为目标。但 Ubuntu 用户有一个小优势,因为 AppArmor 默认限制了漏洞利用所需的部分非特权命名空间。

如何缓解 Fragnesia 漏洞

最佳防御措施是将内核更新到包含 5 月 13 日补丁 的版本。

如果无法立即修补,应通过禁用有漏洞的网络模块来应用 临时缓解措施。

根据 oss-security 帖子 的建议,您可以通过运行以下命令来阻止漏洞利用,将 esp 和 rxrpc 模块加入黑名单:

rmmod esp4 esp6 rxrpc
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf

执行 Fragnesia 测试漏洞

测试前提条件:

  • 目标系统: 系统必须运行受影响的内核版本,且未应用合并补丁。
  • Ubuntu 注意: 由于 Ubuntu 默认限制非特权用户命名空间,您必须首先通过运行以下命令启用它们:sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0。
  • 目标文件: 漏洞默认针对 /usr/bin/su 以获取 root shell。

执行步骤

步骤 1:克隆仓库:

从 GitHub 下载概念验证代码:

git clone https://github.com/v12-security/pocs.git

步骤 2:进入目录:

cd pocs/fragnesia

步骤 3:编译漏洞:

使用 GCC 构建可执行文件:

gcc -o exp fragnesia.c

步骤 4:运行漏洞:

执行编译后的二进制文件:

./exp

漏洞工作原理如下:

  • 命名空间设置: 二进制文件调用 unshare(CLONE_NEWUSER | CLONE_NEWNET) 以在沙箱中获得 CAP_NET_ADMIN 权限。
  • 密钥流生成: 它构建一个 256 条目查找表,将 AES-GCM 密钥流字节映射到特定的 nonce。
  • 触发写入: 漏洞使用 “Splice-then-ULP” 触发方式,将目标文件中的数据拼接(splice)到 TCP 流中,然后延迟安装 ESP-in-TCP 协议。
  • 逻辑错误: 当协议启用时,内核在 合并 过程中“忘记”了这些片段与页缓存共享。然后它错误地执行原地解密,将密钥流直接 XOR 到缓存的文件页面中。
  • 载荷注入: 此过程逐字节迭代,以覆盖内存中 /usr/bin/su 的前 192 字节,写入一个 root shell 存根。

关键的后利用清理

运行测试漏洞后,您的页缓存已被污染。继续使用损坏的文件可能导致不稳定。您必须 重启系统 或手动运行 echo 1 | tee /proc/sys/vm/drop_caches 清除缓存,以确保安全。

7.0.4

CVE-2026-31431

  • Fragnesia(也称 Copy Fail 3.0)是一个通用的 Linux 本地权限提升漏洞,允许非特权用户以 100% 的可靠性获取 root 权限。
  • 它利用了 XFRM ESP-in-TCP subsystem 中的一个逻辑错误,内核在 合并(coalescing) 过程中“忘记”了某个内存片段是共享的。
  • 通过操纵此缺陷,攻击者可以将任意字节写入只读文件(如 /etc/passwd 或 /usr/bin/su)的 页缓存,从而绕过安全检查并进入 root shell。

Fragnesia:让 Linux 获取 root 权限的内存漏洞

安全研究人员刚刚发现了一种接管 Linux 系统的新方法,名为 Fragnesia。该漏洞是 Dirty Frag 漏洞家族的最新成员。

由 William Bowling 和 V12 团队发现,Fragnesia 允许非特权用户以 100% 的可靠性获取 root 权限。

与许多依赖运气或时序的漏洞不同,Fragnesia 是一个 确定性的逻辑错误。这意味着它每次都能成功,对系统管理员来说堪称“噩梦”。

为什么叫 Fragnesia?

这个名字是“fragment”(片段)和“amnesia”(失忆)的组合。研究人员解释,核心错误在于网络缓冲区(称为 skb)在 合并 过程中 “忘记” 了某块内存是共享的。

当 Linux 内核试图通过合并网络数据包来节省时间时,它丢失了一个名为 SKBFL_SHARED_FRAG 的关键安全标记。没有这个标记,内核认为该内存是私有的且可以安全修改。但实际上,该内存仍然与 页缓存 中的敏感文件相关联。

从 Dirty Pipe 到 Fragnesia

Fragnesia 被称为 “Copy Fail 3.0”,因为它改进了从 Dirty Pipe 开始的一类漏洞。这些漏洞都有一个共同目标:将数据写入系统内存(RAM)中的 read-only 文件。

正如 技术文章 所述,Fragnesia 专门针对 ESP-in-TCP subsystem。通过诱使内核在共享内存上执行原地解密,攻击者可以“翻转”他们本应只能读取的文件中的字节,例如 /etc/passwd 或 /usr/bin/su。

漏洞工作原理

该漏洞利用了一个涉及 AES-GCM 加密 的巧妙技巧。以下是其接管系统的逐步过程:

  • 准备阶段: 攻击者通过改变一个称为 nonce 的值,构建一个“密钥流字节”的查找表。
  • Splice 触发: 漏洞利用 splice() 系统调用,将只读文件的页面直接植入网络套接字。
  • 内存 XOR: 通过选择完美的 nonce,攻击者迫使内核将特定字节 XOR 到缓存的文件页面中。
  • 构建 Shell: 这个过程逐字节重复,直到攻击者在内存中的 /usr/bin/su 二进制文件的前 192 字节上写入一个小的 root shell 存根。

一旦缓存中的“脏”二进制文件准备就绪,攻击者只需运行 su。内核执行修改后的版本,绕过所有安全检查,并将用户放入 root shell。

关于 Fragnesia 的一个令人惊讶的细节

如前所述,Fragnesia 漏洞通过使用基于 AES-GCM 计数器块构建的“密钥流查找表”,被设计为 完全确定性 的。

通过预先测试 65,536 个 nonce,攻击者可以创建一个映射,记录内核解密过程将 XOR 到目标文件中的每个可能的字节值。

这使得他们可以逐字节地将文件中的任何字节“翻转”为特定的期望值,而无需赢得任何竞争条件。

受 Fragnesia 影响的 Linux 发行版

如果您使用 Linux,很可能在影响范围内。研究人员确认,所有受原始 Dirty Frag 影响的版本也容易受到 Fragnesia 的攻击。这包括任何尚未应用 5 月 13 日,2026 发布的特定合并修复的内核。

主要发行版如 Ubuntu 已被确认为目标。但 Ubuntu 用户有一个小优势,因为 AppArmor 默认限制了漏洞利用所需的部分非特权命名空间。

如何缓解 Fragnesia 漏洞

最佳防御措施是将内核更新到包含 5 月 13 日补丁 的版本。

如果无法立即修补,应通过禁用有漏洞的网络模块来应用 临时缓解措施。

根据 oss-security 帖子 的建议,您可以通过运行以下命令来阻止漏洞利用,将 esp 和 rxrpc 模块加入黑名单:

rmmod esp4 esp6 rxrpc
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf

执行 Fragnesia 测试漏洞

测试前提条件:

  • 目标系统: 系统必须运行受影响的内核版本,且未应用合并补丁。
  • Ubuntu 注意: 由于 Ubuntu 默认限制非特权用户命名空间,您必须首先通过运行以下命令启用它们:sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0。
  • 目标文件: 漏洞默认针对 /usr/bin/su 以获取 root shell。

执行步骤

步骤 1:克隆仓库:

从 GitHub 下载概念验证代码:

git clone https://github.com/v12-security/pocs.git

步骤 2:进入目录:

cd pocs/fragnesia

步骤 3:编译漏洞:

使用 GCC 构建可执行文件:

gcc -o exp fragnesia.c

步骤 4:运行漏洞:

执行编译后的二进制文件:

./exp

漏洞工作原理如下:

  • 命名空间设置: 二进制文件调用 unshare(CLONE_NEWUSER | CLONE_NEWNET) 以在沙箱中获得 CAP_NET_ADMIN 权限。
  • 密钥流生成: 它构建一个 256 条目查找表,将 AES-GCM 密钥流字节映射到特定的 nonce。
  • 触发写入: 漏洞使用 “Splice-then-ULP” 触发方式,将目标文件中的数据拼接(splice)到 TCP 流中,然后延迟安装 ESP-in-TCP 协议。
  • 逻辑错误: 当协议启用时,内核在 合并 过程中“忘记”了这些片段与页缓存共享。然后它错误地执行原地解密,将密钥流直接 XOR 到缓存的文件页面中。
  • 载荷注入: 此过程逐字节迭代,以覆盖内存中 /usr/bin/su 的前 192 字节,写入一个 root shell 存根。

关键的后利用清理

运行测试漏洞后,您的页缓存已被污染。继续使用损坏的文件可能导致不稳定。您必须 重启系统 或手动运行 echo 1 | tee /proc/sys/vm/drop_caches 清除缓存,以确保安全。