导语:JFrog安全研究团队在审计Linux内核补丁时发现,尽管已有针对DirtyFrag漏洞家族的修复,但仍存在一个残余问题——攻击者可通XFRM/IPsec子系统中的不同数据包处理路径实现本地权限提升。该新变种被命名为”DirtyClone”,已分配CVE-2026-43503,CVSS评分8.8。
一、漏洞概述
DirtyClone是Linux内核内存损坏漏洞家族DirtyFrag的最新成员,专注于核心网络栈中socket buffer(skb)引用共享页缓存内存的方式,最终通in-place加密转换被武器化。
该漏洞的危险性在于:任何无权限的本地用户都可以通过操纵Linux页缓存获得root访问权限(LPE)。攻击无声无息,不留内核日志或审计痕迹,且能绕过常见的磁盘完整性监控工具。
影响范围
- 受影响发行版:Debian、Ubuntu、Fedora等启用了无特权用户命名空间的流行发行版
- 受影响内核:未完整应用DirtyFrag漏洞家族所有补丁的内核版本
- 高风险场景:多租户云环境、Kubernetes集群、启用了用户命名空间或特权容器的容器化工作负载
视频演示(原始来源):https://jfrog.com/blog/dissecting-and-exploiting-a-new-dirtyfrag-variant-dirtyclone/

二、漏洞时间线
- 5月4日:DirtyFrag补丁(CVE-2026-43284和CVE-2026-43500)进入Linux内核主线,修复了spliced UDP数据包缺失SKBFL_SHARED_FRAG标志的bug
- 5月13日:Fragnesia(CVE-2026-46300)披露;补丁进入Linux内核netdev分支
- 5月16日:上游多站点补丁提交,覆盖剩余的frag-transfer辅助函数
- 5月19日:JFrog独立重新发现__pskb_copy_fclone变种,构建PoC并报告
- 5月21日:补丁合并到主线(commit 48f6a5356a33)
- 5月23日:CVE-2026-43503发布
- 5月24日:Linux v7.1-rc5发布,首个修复版本

三、技术原理
3.1 核心问题
DirtyFrag系列漏洞的核心在于:现代Linux内核设计并没有严格区分三种可能重叠的内存角色:
- 文件备份内存(页缓存,用于可执行文件和普通文件)
- 网络缓冲区(通过零拷贝路径处理的数据包)
- 原地转换(如加密/解密,将数据写回同一缓冲区)
当这三种上下文交叉时,内核可能会修改仍与文件语义关联的内存,导致文件备份数据被就地破坏。
攻击滥用了同一条物理内存页同时作为:
- 文件数据(页缓存)
- 网络数据包数据(skb)
3.2 利用步骤
第一步:映射特权二进制文件
攻击者将特权二进制文件(如/usr/bin/su)映射到页缓存:
/usr/bin/su → 页缓存页(RAM)
该页成为后续操纵的目标。
第二步:构造IPsec数据包
攻击者精心构造一个有效载荷由同一页缓存页备份的IPsec数据包。使用vmsplice和splice系统调用,内核将页缓存备份的内存附加到skb,而不是复制数据:
int fd = open("/usr/bin/su", O_RDONLY);
char *p = mmap(NULL, mmap_size, PROT_READ, MAP_SHARED, fd, 0);
struct iovec iov = { .iov_base = p + patch_offset, .iov_len = 16 };
vmsplice(pipefd[1], &iov, 1, 0);
splice(pipefd[0], NULL, sockfd, NULL, 16, 0);
此时,数据包缓冲区实际上是由文件内存备份的。
第三步:本地环回IPsec隧道
攻击者使用基于环回的IPsec隧道,确保数据包保留在本地。这确保了:
- 数据包由攻击者创建
- 同一内核处理数据包
- 数据包经过IPsec接收路径
当数据包到达ESP解密阶段(esp_input())时,IPsec原地解密数据包以提高性能。这意味着输入缓冲区=输出缓冲区,解密后的字节覆盖同一内存。
通常这是安全的,但这里的缓冲区是由页缓存页备份的。如果skb数据位于源自文件映射的页备份缓冲区中,原地解密可能会修改该共享页内容。
第四步:控制解密输出
攻击者控制密码学输入(密钥、IV和数据包布局)。在AES-CBC中,IV影响第一个解密块。通过组合已知原始字节、选定密文结构和受控IV,攻击者可以在特定偏移处强制可预测的输出字节,从而在共享页备份缓冲区中影响解密结果。
第五步:修补su二进制
攻击者使用此原语修补/usr/bin/su中的小段指令序列。只需要几个字节(如控制认证的分支逻辑)。磁盘上的文件保持不变,但页缓存副本被修改:
原始su页 → IPsec写入原语 → 内存中已修改的su页
当再次执行/usr/bin/su时:
- Linux重用缓存页
- 直接使用修改后的指令
- 认证逻辑被绕过
结果:权限提升。
四、DirtyFrag系列修复机制
原始DirtyFrag修复为spliced UDP数据包设置了SKBFL_SHARED_FRAG标志。这是标记引用共享(可能是文件备份)页内存的skb数据包的元数据标志,确保执行原地解密等操作的子系统触发安全的写时复制(Copy-on-Write)。
如果设置了这个标志,IPsec在解密前强制复制:
检测到共享页 → SKBFL_SHARED_FRAG = 1 → 复制skb → 安全解密
这可以防止直接修改文件备份页。
Fragnesia和CVE-2026-43503的修复确保SKBFL_SHARED_FRAG标志在函数间正确传播,不会意外”丢失”。
五、DirtyClone利用场景
5.1 环境配置
攻击者首先需要CAP_NET_ADMIN权限(通无特权用户命名空间通常可获得),以控制网络接口、路由和XFRM/IPsec策略。
攻击者创建一个新的网络命名空间:
unshare -Urn
然后配置基于环回的IPsec隧道:
ip link set lo up
ip addr add 10.99.0.2/24 dev lo
创建IPsec(XFRM)状态:
ip xfrm state add
src 127.0.0.1 dst 127.0.0.1
proto esp spi 0x12345678 reqid 1 mode transport
enc 'cbc(aes)' ...
auth 'hmac(sha1)' ...
添加匹配策略:
ip xfrm policy add
src 127.0.0.1 dst 127.0.0.1 dir out
tmpl src 127.0.0.1 dst 127.0.0.1 proto esp reqid 1 mode transport
最后添加netfilter规则:
iptables -t mangle -A OUTPUT -p udp --dport 4500
-j TEE --gateway 10.99.0.2
5.2 TEE目标的关键作用
TEE目标在内核内部复制传出数据包,触发nf_dup_ipv4,最终导致通__pskb_copy_fclone()进行skb克隆。
当发送UDP数据包时:
- 创建原始skb
- TEE规则复制它
- 内核调用__pskb_copy_fclone()创建克隆skb
此时存在两个skb对象:
- 原始skb → 遵循正常路径
- 克隆skb → 进入易受攻击的转换路径
关键:在克隆过程中,克隆的skb没有正确保留SKBFL_SHARED_FRAG标志。
这是DirtyClone绕过的根本原因:
- 原始skb = 安全 – 元数据完整
- 克隆skb = 不安全 – 元数据缺失

六、原语转化与权限提升
两个skb实例都通过基于环回的IPsec配置路由。克隆的skb最终到达esp_input()。
此时,skb有效载荷不是普通网络内存,而是引用源自文件映射(如/usr/bin/su)的页缓存备份内存。内存布局如下:
文件备份页(页缓存)
├─ /usr/bin/su内容
└─ skb有效载荷引用
重要的是,skb不复制数据,而是引用同一物理页。这种共享引用使得跨所有DirtyFrag变种重用的页缓存写入原语成为可能。
当克隆的skb到达esp_input()时,IPsec对数据包有效载荷执行原地解密。解密后的字节直接写入文件备份页:

控制写入内容
攻击者可以控制:
- AES-CBC密钥材料(通SA配置)
- 每个数据包的IV
- 数据包布局和偏移
在AES-CBC中,每个解密块依赖于IV。攻击者可以计算出一个IV,使输出变得可预测。结合已知原始字节、期望目标字节和受控IV,攻击者将解密转化为页缓存内存上的受控写入原语。
发送的数据包结构如下:

最终权限提升
使用此原语,攻击者修补/usr/bin/su内选的指令字节。典型修补目标包括认证检查和条件分支指令。只需要小的局部修改。磁盘文件保持不变,页缓存包含修改后的可执行代码。
当执行su时,Linux从页缓存加载二进制文件。如果修改后的页仍被缓存:
- 无需磁盘重新加载
- 直接执行修改后的指令
执行流程:
已修改页缓存 → 执行su → 修改后的逻辑运行 → 权限提升
七、修复建议
- 立即更新:将Linux内核更新到v7.1-rc5或应用CVE-2026-43503的 backported 补丁
- 临时缓解措施:如无法立即打补丁,可通过以下方式阻止CAP_NET_ADMIN获取:
- 设置kernel.unprivileged_userns_clone=0
- 黑名单esp4、esp6和rxrpc内核模块(阻止原地解密原语)
版权声明:本文由华安普特原创发布,保留所有权利。配图由华安普特授权使用。














暂无评论内容