你有没有想过,一个普通用户,不需要任何特殊权限,不需要网络访问,甚至不需要知道内核地址,就能直接拿到root权限?这不是科幻,这是刚刚公开的 CVE-2026-31431,代号"Copy Fail"。
这个漏洞有多离谱?
732字节的Python脚本,一行命令,普通用户变root。
不需要race condition,不需要内核地址,不需要任何前置条件。同一个脚本,不改一行代码,通杀Ubuntu、RHEL、Amazon Linux、SUSE等所有主流发行版。
漏洞藏在Linux内核的加密API(AF_ALG)里。2017年,开发者做了一个"优化"——让AEAD解密操作就地执行,省一次内存拷贝。就是这个看似无害的优化,把页面缓存的页面链入了可写的scatterlist。
结果就是:攻击者可以通过splice系统调用,把任意可读文件的页面缓存变成可写,然后修改setuid二进制文件的内容。下次执行这个setuid程序时,就是root权限。

整个过程,不需要有效的认证标签,不需要内核调试特性,不需要网络。一个本地普通用户账号就够了。
谁在被影响?
2017年以后的所有Linux发行版,全在射程内。
具体到我们自己的服务器,内核版本6.18.18,CONFIG_CRYPTO_USER_API_AEAD=m模块已加载,PoC验证结果:VULNERABLE。
影响范围不只是传统服务器。Kubernetes容器集群、CI/CD构建农场、云SaaS平台、共享开发机——任何多租户Linux环境,一个恶意PR就能拿到宿主机root。

怎么修?
第一步(立即执行):临时缓解,禁用algif_aead模块:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
对绝大多数系统来说,这不会影响任何功能。dm-crypt/LUKS、kTLS、IPsec、SSH这些都不走AF_ALG。
第二步(尽快执行):升级内核到修复版本。修复commit已经合入mainline,各大发行版正在推送。
第三步(长期策略):对不可信工作负载(容器、沙箱、CI),用seccomp阻断AF_ALG socket创建,不管内核是否已打补丁。
检测你的服务器
三行命令,马上知道你有没有中招:
# 检查内核版本
uname -r
# 检查AF_ALG加密接口状态
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
# 验证漏洞是否存在
python3 -c "import socket; socket.socket(38,5,0); print('VULNERABLE')"
如果最后一行输出VULNERABLE,你的服务器就在裸奔。
写在最后
这个漏洞最让人后背发凉的地方不是技术难度——而是它安安静静地躺了9年。2017年的一个"优化",变成了2026年的0day。
安全行业有个说法:没有绝对安全的系统,只有还没被发现的漏洞。Copy Fail就是最好的注脚。它提醒我们:保持内核更新不是可选项,是必选项。
你的服务器,今天检查了吗?
三页札记 | 每天三分钟,看懂AI世界