DirtyFrag内核提权与容器逃逸途径
Contents
Electric Boogaloo是一个续集烂片的梗,《Copy Fail 2: Electric Boogaloo》就是指DirtyFrag

CVE-2026-43284
XFRM(Transform)是Linux内核中实现IPsec的框架,XFRM有管理召回范围的SPD(Security Policy Database)、定义处理方式的SAD(Security Association Database)数据库。
处理方式有包含加解密的ESP协议(Encapsulating Security Payload)、只作校验的AH(Authentication Header)协议。为了兼容NAT穿透,XFRM会将ESP协议封装进UDP中(ESP-in-UDP)。
Linux内核提供了一个Socket接口NETLINK_XFRM供用户态访问,通过skb_to_sgvec函数将Socket Buffer(SKB)结构体转换为Scatterlist(SGL)结构体,进行高效的Zero-Copy和In-place加解密。
xfrm-ESP页缓存覆写
具备CAP_NET_ADMIN权限时配置SAD规则,数据最终流向相同的crypto_authenc_esn_decrypt函数,SKB->frags[]会被映射到SGL指针,用户可控的Payload(seqno_lo)再次在In-place机制加持下完成对Page Cache的覆写。
1 | static void esp_input_set_header(struct sk_buff *skb, __be32 *seqhi) |
1 | udp_rcv(skb) |
Patch

Zero-Copy场景下增加SKBFL_SHARED_FRAG标记,改为Copy-on-Write而非In-place方式进行加解密。
CVE-2026-43500
Andrew File System(AFS)是一种分布式文件系统,使用基于UDP的RxRPC网络协议。Linux内核集成并提供了了一个AF_RXRPC Socket接口供用户态访问。
rxkad是基于Kerberos v4的RxRPC协议安全机制,提供校验(RXRPC_SECURITY_PLAIN)、认证(RXRPC_SECURITY_AUTH)、加密(RXRPC_SECURITY_ENCRYPT)功能,采用基于DES-pcbc的fcrypt算法,密钥长度仅有56位。
RxRPC页缓存覆写
rxkad进行pcbc(fcrypt)解密时也会使用相同SGL(In-place),输入是目标文件、密钥可控、IV为0(pcbc_decrypt(C, K, IV=0)),需要通过暴破K来翻转目标文件字节实现篡改,shellcode理论爆破次数为N*2^56或更大,想实战中覆写shellcode来提权或者容器逃逸几乎不可能。
因此作者选择了翻转/etc/passwd文件中root用户行部分字节的方式,降低暴破复杂度实现本地提权。
1 | static int rxkad_verify_packet_1(struct rxrpc_call *call, struct sk_buff *skb, |
Container Escape
xfrm-ESP对于Payload受限少,但存在命名空间权限要求。RxRPC对于权限要求少,但Payload会受限于暴破复杂度只能篡改有限字节数。
两个漏洞的结合利用可以规避部分AppArmor策略限制,扩大本地提权可攻击范围;但对于容器逃逸而言,xfrm-ESP需要满足命名空间系统调用条件,RxRPC只可能在一些极其特殊的场景下利用。
Last Word
大家可以看看年初公布的CVE-2026-23060,会有一些有意思的发现。