Linux 内核网络子系统曝出本地权限提升漏洞 Fragnesia。攻击者在具备本地低权限执行能力,并可创建 user/network namespace、获得网络命名空间内 CAP_NET_ADMIN 的条件下,可触发 XFRM ESP-in-TCP 逻辑缺陷,篡改只读文件页缓存,并进一步通过篡改 setuid 程序页缓存提权至 root。目前 360漏洞挖掘智能体已成功复现该漏洞。本文包含完整影响范围、修复方案、技术原理与复现细节,建议用户立即升级。
|
| Linux 内核 Fragnesia 权限提升漏洞 |
| |
| | | |
| | | |
| | | |
| | | |
受影响的软件版本:
该漏洞的影响范围与 Dirty Frag 基本相同,几乎覆盖所有尚未合入修复补丁的主流企业级和桌面 Linux 发行版。自 cef401de7be8 引入 SKBFL_SHARED_FRAG 机制起,到本次修复之间的相关内核版本均受影响。Ubuntu 默认的 AppArmor 配置会限制非特权 user namespace,从而对公开利用形成缓解,因此默认情况下利用受限。Android 方面,由于默认禁用 CONFIG_USER_NS,标准设备通常不受该漏洞影响。
正式防护方案
官方发布了正式的修复Patch,详情如下:
diff --git a/net/core/skbuff.c b/net/core/skbuff.cindex 7dad68e3b..9c4e8d331 100644--- a/net/core/skbuff.c+++ b/net/core/skbuff.c@@ -6200,6 +6200,8 @@ boolskb_try_coalesce(struct sk_buff *to, struct sk_buff *from, from_shinfo->frags, from_shinfo->nr_frags * sizeof(skb_frag_t)); to_shinfo->nr_frags += from_shinfo->nr_frags;+ if (from_shinfo->nr_frags)+ to_shinfo->flags |= from_shinfo->flags & SKBFL_SHARED_FRAG;if (!skb_cloned(from)) from_shinfo->nr_frags = 0;
修复后只在实际有 frag 被转移时才传播标志(nr_frags > 0 的守卫), 使用 |= 而非赋值,保留 to 已有的其他 flags 状态, 用 & SKBFL_SHARED_FRAG 掩码精确传播,不引入其他 flags 的副作用,修复后 skb_has_shared_frag() 能正确识别合并后的 skb,ESP 路径重新走 COW,彻底封堵了从"标志丢失"到"错误 in-place 解密"的整条利用链。
近期,William Bowling 与 V12 团队开发并公开了一个通用的 Linux 本地提权漏洞利用程序Fragnesia。
Fragnesia 属于 Dirty Frag 漏洞类别的一员。这是 ESP/XFRM 子系统中的一个独立漏洞,与 dirtyfrag 不同,并且已经获得了单独的补丁。不过,它位于相同的攻击面,缓解措施也与 dirtyfrag 相同。
它利用 Linux XFRM ESP-in-TCP 子系统中的一个逻辑漏洞,在无需任何竞争条件(race condition)的情况下,实现对只读文件内核页缓存(kernel page cache)的任意字节写入。
该技术扩展了包括 Dirty Pipe 在内的页缓存写入漏洞类别:当一个 TCP socket 在已有数据从文件 splice 到接收队列后,再切换到 espintcp ULP 模式时,内核会将这些已排队的文件页当作 ESP 密文进行处理。AES-GCM 密钥流在 counter block 位置 2、字节 0 的值,会被直接 XOR 到缓存文件页中。通过选择合适的 IV nonce 以生成目标密钥流字节,攻击者即可将文件中的任意目标字节设置为任意值——每次触发调用可修改一个字节。
该利用程序会构建一个包含 256 个条目的查找表,将每一种可能的密钥流字节映射到对应的 nonce,然后遍历 payload,对每一个需要修改的字节重复触发 splice/ULP 流程。它会将一个小型位置无关 ELF stub(执行 setresuid/setresgid/execve /bin/sh)写入 /usr/bin/su 的前 192 字节页缓存中,随后调用 execve("/usr/bin/su") 获取 root shell。页缓存中的修改不会回写到磁盘,磁盘上的原始二进制文件不会被修改。
根因分析
问题位于 net/core/skbuff.c 的 skb_try_coalesce() 函数。skb_try_coalesce() 在合并分页 frag 时,只拷贝了 frag 描述符(物理指针),却没有传播 SKBFL_SHARED_FRAG 标志,导致目标 skb 持有指向页缓存(page-cache)的 frag,但"以为"自己的 frag 是私有的。
// 修复前的行为(问题代码段)memcpy(to_shinfo->frags, from_shinfo->frags, from_shinfo->nr_frags * sizeof(skb_frag_t));to_shinfo->nr_frags += from_shinfo->nr_frags;// ← 此处 from_shinfo->flags 中的 SKBFL_SHARED_FRAG 未被传播到 to_shinfo->flags// frag 描述符被复制了,但"这些 frag 是共享的"这一语义元数据被丢弃了
360漏洞研究院已成功复现 Linux 内核 Fragnesia 权限提升漏洞,获取 root 权限。
Linux 内核 Fragnesia 权限提升漏洞复现
2026年05月14日,360漏洞研究院发布本安全风险通告。
https://lists.openwall.net/netdev/2026/05/13/79
“扫描下方二维码,进入公众号粉丝交流群。更多一手网安资讯、漏洞预警、技术干货和技术交流等您参与!”
建议您订阅360数字安全-漏洞情报服务,获取更多漏洞情报详情以及处置建议,让您的企业远离漏洞威胁。
邮箱:360VRI@360.cn
网址:https://vi.loudongyun.360.net
360 漏洞研究院,隶属于360数字安全集团。其成员常年入选谷歌、微软、华为等厂商的安全精英排行榜, 并获得谷歌、微软、苹果史上最高漏洞奖励。研究院是中国首个荣膺Pwnie Awards“史诗级成就奖”,并获得多个Pwnie Awards提名的组织。累计发现并协助修复谷歌、苹果、微软、华为、高通等全球顶级厂商CVE漏洞3000多个,收获诸多官方公开致谢。研究院也屡次受邀在BlackHat,Usenix Security,Defcon等极具影响力的工业安全峰会和顶级学术会议上分享研究成果,并多次斩获信创挑战赛、天府杯等顶级黑客大赛总冠军和单项冠军。研究院将凭借其在漏洞挖掘和安全攻防方面的强大技术实力,帮助各大企业厂商不断完善系统安全,为数字安全保驾护航,筑造数字时代的安全堡垒。