一个SA。一次一个字节。无竞态。
Go 移植版 fragnesia (CVE-2026-46300)。属于 Dirty Frag 漏洞家族——不同的漏洞,相同的攻击面,独立的补丁。
该漏洞位于 Linux XFRM ESP-in-TCP 子系统中。当数据已经通过 splice() 从文件传输到 TCP 接收队列后,在套接字上安装 TCP_ULP espintcp 时,内核会将队列中的数据视为 ESP 密文记录并就地解密。该数据的来源是页缓存页面。解密过程将 AES-GCM 密钥流直接 XOR 到该页面中。
结果是实现对任何可读文件的页缓存进行受控的单字节写入。
密钥流表
AES-GCM (RFC 4106) 在位置2的计数器块为 [salt(4) || IV(8) || 0x00000002]。使用会话密钥加密后得到一个16字节的密钥流块。该块的字节0被 XOR 到目标字节中。通过改变 IV nonce 的低32位,可以在前65536个 nonce 内达到所有256个可能的密钥流字节值。该漏洞利用程序在启动时通过 AF_ALG AES-ECB 构建一次该查找表。
字节翻转循环
对于载荷的每个字节:
needed_keystream = current XOR desired。TCP_ULP 安装直到数据已排队)。current XOR keystream = current XOR (current XOR desired) = desired。一个SA。最多192次触发。确定性。
go build -o fragnesia-go .
./fragnesia-go
成功时会通过一个新的 PTY 进入一个 root shell。磁盘上的二进制文件未被触及——仅页缓存。
echo 1 | tee /proc/sys/vm/drop_caches
esp6(传输模式,IPv6 回环)补丁前的所有内核:https://lists.openwall.net/netdev/2026/05/13/79
与 dirtyfrag 范围相同。
与 dirtyfrag 相同:
rmmod esp4 esp6
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' \
> /etc/modprobe.d/fragnesia.conf
| dirtyfrag-go | fragnesia-go | |
|---|---|---|
| CVE编号 | CVE-2026-43284 / CVE-2026-43500 | CVE-2026-46300 |
| 传输方式 | ESP-in-UDP + RxRPC | ESP-in-TCP (ULP) |
| 写入粒度 | 每次触发4字节 | 每次触发1字节 |
| XFRM SA数量 | 48 | 1 |
| 加密算法 | HMAC-SHA256 + CBC-AES | AES-128-GCM |
| IP协议族 | IPv4 | IPv6 |