目录
[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