一句话速览:攻击者可以在未打补丁的 Linux 系统上,利用 ESP-in-TCP 与 skb coalescing 的标记丢失漏洞,直接修改只读文件的 page cache,进而实现本地提权。影响范围覆盖大量未合入 2026 年 5 月修复补丁的内核版本。
🚨 漏洞速递
漏洞名称:Fragnesia(属于 Dirty Frag 漏洞类别)
漏洞编号:暂无(关联 CVE-2026-43284、CVE-2026-43500)
CVSS 评分:7.8(高危)
漏洞类型:本地提权、page cache 篡改
影响组件:net/core/skbuff.c (skb_try_coalesce)、XFRM ESP、ESP-in-TCP ULP、TCP receive queue
📌 受影响的系统
⚠️ 公开 PoC 已发布,攻击者利用 splice() + ESP-in-TCP + 精心构造的 AES-GCM 密文,可对只读文件的 page cache 实现任意字节写。
🔬 漏洞原理深度解析
1. 根源:丢失的 shared-frag 标记
Linux 内核在合并两个 skb(skb coalescing)时,函数 skb_try_coalesce() 会把源 skb 的分页 frag 转移到目标 skb。但是,旧版本内核没有正确保留 SKBFL_SHARED_FRAG 标记。
2. 攻击链路:splice() → TCP → ESP-in-TCP → 原地解密
text1. 攻击者 splice() 一个只读文件(如 /etc/passwd)的 page cache 页到 TCP socket 的发送缓冲。2. 该页被引入 TCP receive queue 作为 skb 的 paged frag,且本该是 "shared"。3. 在启用 ESP-in-TCP ULP 之前,数据已经在 TCP 队列中排队(顺序可控制)。4. 随后,攻击者配置 XFRM SA,启用 ESP-in-TCP 解密。5. 内核将队列中的 TCP payload 当作 ESP 记录处理。此时: - 因为 coalescing 导致 SKBFL_SHARED_FRAG 丢失 → skb_has_shared_frag() = false。 - ESP 输入逻辑认为该 skb 不共享,于是**跳过 copy-on-write(COW)**,直接在原始的 page cache 页上原地解密。6. ESP/AES-GCM 解密本质是 ciphertext ⊕ keystream。攻击者通过控制 IV/nonce 使解密后的明文变成任意想要的值 → 实现 page cache 的按字节修改。
3. 后果:只读文件在内存中被篡改
💥 攻击效果演示(概念)
| | |
|---|
/etc/passwd | 将 root:x:0:0 中的 x 改为空 → 无密码登录 root | |
/etc/sudoers | 添加 $(whoami) ALL=(ALL) NOPASSWD: ALL | |
| | |
📌 注意:攻击需要精准控制 XOR 后的结果,并且要处理 ESP 的完整性校验(PoC 中已可绕过或利用算法特性)。
🛡️ 处置与缓解措施
✅ 立即行动(业务优先)
限制非特权 user namespace
sysctl -w kernel.unprivileged_userns_clone=0# 或 kernel.unprivileged_userns=0 (不同内核版本)
绝大多数攻击路径依赖 unprivileged user namespace 来获得 CAP_NET_ADMIN。
禁用 ESP-in-TCP
echo "blacklist esp4" >> /etc/modprobe.d/disable-esp.confecho "blacklist esp6" >> /etc/modprobe.d/disable-esp.confreboot
容器/云原生加固
🔧 彻底修复
📊 检测方法
检查系统是否已合入修复补丁:
grep skb_try_coalesce /proc/kallsyms# 或者查看内核源码版本与补丁提交时间uname -a# 如果内核编译时间早于 2026-05-13 且未向后移植,则极可能受影响
更精确的检测:查看 /proc/config.gz 或 /boot/config-$(uname -r) 中 CONFIG_XFRM、CONFIG_INET_ESP 是否为 y 或 m。
🧠 漏洞关联与背景知识
| | |
|---|
| Dirty Frag | | 也是利用 skb frag 共享标记问题,但攻击面不同。Fragnesia 是 XFRM/ESP 中的独立漏洞。 |
| | NVD 描述“Linux kernel xfrm/ESP 在 shared skb frags 上避免原地解密的问题”。 |
| | RxRPC 中的类似 dirty frag 链路。 |
📖 总结 & 思考
Fragnesia 再次提醒我们:
Page cache 不再可信——即便文件是只读的、不可变的,在内存中仍可能被内核漏洞篡改。
Network + filesystem 的交汇点是漏洞高发区(skb frag → page cache)。
非特权命名空间提供便利的同时,也大幅放大了本地提权的攻击面。
对于安全运维:不要以为只读文件系统 + 文件完整性监控就能高枕无忧——Fragnesia 教你做人,篡改发生在 RAM 里,磁盘校验完全看不到。
对于内核开发者:skb_has_shared_frag() 判断后若为 false 也不能直接原地写,需要结合页面引用计数、映射计数等多因素决定是否 COW。