Copy Fail Linux内核提权漏洞(CVE-2026-31431)

目录

1、确认是否涉及漏洞

2、影响范围

3、复现漏洞

[4、 漏洞修复](#4、 漏洞修复)

方案一:临时缓解(无需重启,快速止血)

方案二:升级修复(彻底根治,需重启)


Copy Fail (CVE-2026-31431) 漏洞技术根因分析

该漏洞的根源位于 Linux 内核加密子系统(crypto)的 authencesn AEAD 模板中(主要用于 IPsec 的扩展序列号 ESN 支持)。其形成是历史代码优化与特定算法逻辑缺陷叠加的结果:

前置条件(2017年代码变更):algif_aead 模块曾引入一项"in-place(就地)优化"。该优化导致 AF_ALG socket 在处理 AEAD 解密请求时,会将目标文件的页缓存(page cache)页面直接链入可写的散列表(scatterlist)中,打破了输入输出内存区域分离的安全假设。

触发机制(逻辑缺陷):authencesn 算法在解密过程中,会将调用者提供的目标缓冲区末尾当作临时暂存空间(scratch space)。该函数会在合法输出边界之外,额外写入 4 字节的序列号低位数据(seqno_lo),且不会恢复原始内容。

攻击链闭环:攻击者利用 splice() 零拷贝机制,将任意可读文件(如 /usr/bin/su)的页缓存页面传入 AF_ALG socket。由于上述"就地优化",authencesn 的越界写入操作会直接覆盖到该文件的页缓存中。

漏洞影响:该过程被称为"Copy Fail",即复制操作因逻辑缺陷"失败"并越界。攻击者无需竞争条件(race condition)或反复重试,单次直线执行即可成功。通过精确覆盖 SUID 程序在内存中的 4 字节代码,攻击者可直接篡改程序逻辑,进而获取系统的 root 权限。

1、确认是否涉及漏洞

复制代码
检查内核版本,uname -r

检查内核配置是否启用(推荐)
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r) 

注:会出现以下三种情况:

CONFIG_CRYPTO_USER_API_AEAD=n 彻底关闭,绝对不受影响

CONFIG_CRYPTO_USER_API_AEAD=y 静态编译进内核,Ismod 查不到,但存在漏洞可被利用(例如:Centos 8.5)

CONFIG_CRYPTO_USER_API_AEAD=m 模块方式,Ismod 可查,加载就有风险

检查authencesn模块状态:

复制代码
$ lsmod | grep authencesn
authencesn             77824  0

2、影响范围

几乎所有主流发行版默认内核均受影响(AF_ALG默认启用):

|-----------------|-------------------------------------------------|
| 发行版系列 | 受影响的具体版本 |
| Ubuntu | 24.04 LTS、22.04 LTS、20.04 LTS 及以下版本 |
| Red Hat (RHEL) | RHEL 10、9、8 及以下版本 |
| Debian | Debian 13、12、11 等同期内核版本 |
| Amazon Linux | Amazon Linux 2023、Amazon Linux 2 |
| SUSE / openSUSE | SUSE 16、openSUSE Leap 15.6 及以下版本 |
| 国产操作系统 | 统信 UOS、麒麟 (Kylin) V10/V11、openEuler、Anolis OS 等 |

3、复现漏洞

克隆仓库:

复制代码
git clone https://github.com/theori-io/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431

运行环境依赖:

复制代码
需要 kernel-devel 和相关构建工具

sudo apt update
sudo apt install linux-headers-$(uname -r) build-essential

执行(请勿在生产环境测试):

复制代码
python3 copy_fail_exp.py

id
uid=0(root) gid=0(root) groups=0(root)

看到 uid=0(root) 即为利用成功。

4、 漏洞修复

方案一:临时缓解(无需重启,快速止血)

适用场景:无法立即安排重启的生产环境,且业务不依赖 AF_ALG 接口。

复制代码
# 1. 写入禁用配置(比黑名单更彻底)
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf

# 2. 立即卸载当前已加载的模块
sudo rmmod algif_aead 2>/dev/null || true

# 3. 更新 initramfs(确保重启后依然生效)
# Ubuntu/Debian 系统执行:
sudo update-initramfs -u
# RHEL/CentOS/Alibaba Cloud Linux 系统执行:
sudo dracut -f
方案二:升级修复(彻底根治,需重启)

适用场景:可以安排维护窗口重启,或临时缓解无效(静态编译内核)的系统。

复制代码
# 1. 执行内核升级
# Ubuntu/Debian 系统执行:
sudo apt update && sudo apt full-upgrade -y
# RHEL/CentOS/Alibaba Cloud Linux/Amazon Linux 系统执行:
sudo yum update kernel -y

# 2. 必须重启系统以加载新内核
sudo reboot

# 3. 重启后验证内核版本(需符合官方修复版本要求)
uname -r
相关推荐
code monkey.6 小时前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
wgc2k6 小时前
Node.js游戏服务器项目移植-2: 用TypeScript还是Javascript
服务器·游戏·node.js
草莓熊Lotso6 小时前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
上海云盾第一敬业销售7 小时前
服务器遭受攻击的应对策略及快速防护实践
运维·服务器·web安全·ddos
剑神一笑12 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
Lumbrologist12 小时前
【零基础部署】Docker 部署 CrewAI 多 Agent 编排框架保姆级教程
运维·docker·容器
yyuuuzz12 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
剑神一笑12 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
雅菲奥朗13 小时前
企业级 AI 自动化|OpenClaw 龙虾实战与认证
运维·人工智能·自动化·openclaw
江华森14 小时前
Ansible 自动化运维:从入门到实战
运维·自动化·ansible