Linux 九年漏洞"Copy Fail"曝光:普通用户秒变 root,容器也能逃逸!
哈喽各位,这里是「一万AI分享」,我是老被各种漏洞折腾到头秃的一万。今天咱们不搞 AI 部署了,来聊个刺激的。
就在今天,Linux 圈子里炸了个大雷——一个潜伏了整整九年的高危漏洞被公开了,代号叫 “Copy Fail” (CVE-2026-31431)。这个漏洞有多离谱呢?简单来说,哪怕你只是个啥权限都没有的普通小号,只要在这个系统里敲几行代码,就能强行给自己”黄袍加身”,直接拿到最高级别的 root 权限。更要命的是它还能搞”容器逃逸”,如果你把业务跑在 Docker 里,黑客能直接穿透容器,把你宿主机的老底都给掀了。
很多小白看官方那堆诸如 scatterlist、page cache 的原理解释,肯定像看天书一样。一万我用大白话给你们翻译翻译。
这事儿其实是个”代码蝴蝶效应”
这事儿其实是个极其荒诞的”代码蝴蝶效应”。在这个漏洞里,有三个本来完全独立、单独看毫无毛病的代码提交,在 2017 年那会儿倒霉地撞在了一起:
-
第一位老哥(2011年): 写了个叫
authencesn的底层加密模板。他有个坏习惯,在处理数据时,喜欢把”输出文件筐”当成临时草稿纸,往里写点暂存数据。 -
第二位老哥(2015年): 搞了个新功能,允许系统把”只读的文件缓存”直接塞进”输入文件筐”里,为的是少复制一次数据,跑得更快。
-
第三位老哥(2017年): 为了搞极致的”性能优化”,一拍脑袋说:既然输入和输出最终是同一批数据,咱们别来回倒腾了,直接让”输入文件筐”和”输出文件筐”变成同一个吧!(这就是所谓的 in-place 原地模式)。
结果这三个机制一碰头,灾难降临了:第三位老哥把”只读文件”和”输出筐”融为了一体,而第一位老哥还在按照老习惯,傻乎乎地往”输出筐”里乱写草稿。这就导致,一个普通用户通过 algif_aead 接口调用这个模块时,能精准地把 4 个字节 的恶意指令写进原本受内核保护的只读文件里!就靠这 4 个字节,黑客就能篡改 /usr/bin/su 等系统关键文件,原地升仙变成 root。
影响范围
别查了,只要你的 Linux 是 2017 年之后装的主流系统,不管是 Ubuntu、红帽还是亚马逊云的机器,几乎全军覆没。
官方的修复方法很简单粗暴:把第三位老哥的那个”性能优化”给撤了(回退为 out-of-place 模式),宁愿机器跑得稍微慢点,也绝对不让只读文件进到可写的框里。
紧急修复方案
对咱们自己管服务器、玩 VPS 的玩家来说,现在只有两条路:
方案一:升级内核并重启
这是官方推荐的彻底解决方案,补丁已合并到内核主线,各主流发行版也在陆续推送修复版本。
Ubuntu/Debian 系列:
# 更新软件源并升级内核sudo apt update && sudo apt upgrade
# 或者只升级内核包sudo apt install linux-image-generic linux-headers-generic
# 重启系统sudo rebootCentOS/RHEL/Rocky/Alma 系列:
# 更新内核sudo yum update kernel
# 或使用 dnf(较新版本)sudo dnf update kernel
# 重启系统sudo rebootAmazon Linux 2023:
# 更新系统sudo yum update
# 重启系统sudo reboot重启后验证:
# 查看当前内核版本uname -r
# 确认补丁已生效(以下命令应该返回空,表示模块被正确禁用)cat /sys/kernel/crypto/algif_aead 2>/dev/null || echo "模块已禁用或不存在"我知道各位生产环境的机器大概率是不敢随便重启的,所以方案二才是咱们的”急救药”。
方案二:临时封印大法(极其推荐)
如果你没法马上重启机器,赶紧登上服务器,把漏洞的调用入口直接封死。打开你的终端,执行以下命令:
# 将 algif_aead 模块加入黑名单,阻止其被加载echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
# 尝试卸载已加载的模块(如果存在)rmmod algif_aead 2>/dev/null || true
# 详细原理解释:# 这个漏洞的"根"确实在底层的 authencesn 加密模板,但黑客想利用它,必须通过 algif_aead 这个用户态接口才能触及。# 我们把 algif_aead 封死,就等于切断了从用户空间到漏洞模块的调用链,让黑客根本没机会触发那个"越界写草稿"的流程。## 这里的 "install" 指令是一个拦截钩子(Hook),告诉内核:# "当你要加载 algif_aead 这个模块时,不要执行默认动作,而是去执行 /bin/false"。# /bin/false 只会返回失败状态码,于是模块加载请求被直接阻断。## rmmod 命令则是为了处理"模块已经加载在内存里"的情况——黑名单只能阻止新加载,管不了已经在跑的。# 执行完这两步,就能在不重启服务器的前提下彻底封堵漏洞入口。## 好消息:官方确认,禁用 algif_aead 不会影响 dm-crypt/LUKS 磁盘加密、IPsec VPN、# OpenSSL、SSH 等常用功能,因为它们底层走的是其他加密接口,压根不经过这个模块。赶紧去检查你的服务器打补丁吧,别等机器成了别人的挖矿肉鸡再来拍大腿。干活去了,下期见。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
一万AI分享