概述
2026年5月,Linux 内核安全事件密集披露,连续爆出三个本地提权(Local Privilege Escalation)漏洞,均可让普通用户获得系统 root 权限。
| CVE | 名称 | 漏洞类型 | 影响版本 | 披露时间 |
|---|---|---|---|---|
| CVE-2026-31431 | Copy Fail | 内核加密 API 逻辑漏洞 | 4.14 – 6.18.22 / 6.19.12 / 7.0 | 2026年4月29日 |
| CVE-2026-43284/43500 | Dirty Frag | 页缓存损坏 | 多数 Linux 发行版 | 2026年5月8日(分配CVE) |
| CVE-2026-6018/6019 | — | 本地提权 | 多数 Linux 发行版 | 2026年5月 |
CVE-2026-31431:Copy Fail
漏洞原理
这是内核加密 API(AF_ALG)的逻辑漏洞。2017年引入的一项优化(commit 72548b093ee3)在 AEAD(Authenticated Encryption with Associated Data)解密操作中,将 TX SGL 的 tag 页通过 sg_chain() 链到 RX SGL,然后设置 req->src = req->dst。
问题出在 crypto_authenc_esn_decrypt() 中:当 src == dst 时,函数认为这是原地解密操作,在 tag 区域写入 4 字节。这个写入发生在 tag 校验之前,所以即使用户提供了错误的认证 tag(导致解密失败),页缓存中特定偏移处的 4 字节已经被污染。
技术细节
正常流程:
用户调用 AF_ALG 解密
↓
_aead_recmsg() 将 tag 从 TX SGL 链到 RX SGL
↓
提交 AEAD 请求,req->src == req->dst
↓
crypto_authenc_esn_decrypt() 认为原地解密
↓
在 tag 区域写入 4 字节(在校验之前)
↓
即使解密失败,页缓存已被污染
利用方式
攻击者获得一个受控的 4 字节任意写入原语,可以重复调用逐步修改文件内容。典型攻击路径:
- 用
splice()将目标文件(如/etc/passwd、/etc/sudoers)加载到页缓存 - 通过 AF_ALG 调用
authencesn解密,触发受控 4 字节覆写 - 重复调用,逐步修改文件内容
- 例如修改
/etc/passwd给普通用户加sudo权限,或修改 PAM 配置绕过认证
影响范围
| 版本范围 | 修复版本 |
|---|---|
| 4.14 – 6.18.22 | 6.18.22(commit fafe0fa) |
| 4.14 – 6.19.12 | 6.19.12(commit ce42ee4) |
| 4.14 – 7.0 | 7.0(commit a664bf3) |
缓解措施
# 禁用 algif_aead 模块(临时缓解)
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
PoC
- 官方 PoC:
https://github.com/theori-io/copy-fail-CVE-2026-31431 - Rust 重写版:
https://github.com/Dullpurple-sloop726/CVE-2026-31431-Linux-Copy-Fail
CVE-2026-43284/43500:Dirty Frag
漏洞原理
Dirty Frag 涉及 Linux 内核页缓存管理中的数据竞争(race condition)。攻击者通过控制何时刷新脏页以及何时触发特定内存分配时序,可以将任意文件内容覆写到另一个文件所在的页缓存位置。
本质是页缓存损坏(page cache corruption)——当多个文件操作同时进行且涉及内存重新分配时,内核刷新路径和分配路径之间存在竞争窗口,攻击者利用这个窗口将恶意数据写入本不应被修改的文件页。
利用方式
攻击者利用页缓存损坏,直接修改:
/etc/passwd— 添加 root 权限用户/etc/sudoers— 提升普通用户权限- PAM 配置文件 — 绕过认证
- setuid 可执行文件 — 注入后门
影响范围
已在 CVE-2026-43284 下列出,多个 Linux 内核版本受影响。Greg KH(内核 CVE 协调员)于2026年5月8日正式分配了 CVE。
检测/缓解
# Wazuh 已发布检测规则
# 项目:https://github.com/mym0us3r/DIRTY-FRAG-Detection-with-Wazuh-4.14.4
# 通用缓解:关注内核更新,等待官方补丁
CVE-2026-6018/6019
漏洞信息
这是5月份新披露的一对 Linux 本地提权漏洞。根据安全客报道,这两个漏洞允许攻击者在大多数 Linux 发行版上获得 root 权限。
具体技术细节尚在披露中,但属于内核权限检查绕过或内存破坏类漏洞,对标传统的 CVE-2021-3156(sudo 缓冲区溢出)级别的威胁。
影响
受影响机器一旦被普通用户访问,攻击者可在数秒到数分钟内拿到 root shell,且不依赖特殊配置。
三个漏洞的对比
| 维度 | Copy Fail | Dirty Frag | CVE-2026-6018/6019 |
|---|---|---|---|
| 漏洞类型 | 加密 API 逻辑漏洞 | 页缓存竞争条件 | 内核 LPE(具体待定) |
| 利用难度 | 中等(需反复调用) | 高(竞争窗口难以把握) | 待定 |
| 确定性 | 高(确定性4字节写入) | 中 | 待定 |
| 影响文件 | 任意可读文件 | 任意文件(范围更广) | 待定 |
| 触发方式 | AF_ALG + splice | 文件操作竞争 | 待定 |
| 公开 PoC | 有 | 有(GitHub) | 部分 |
防御建议
1. 立即行动
# 检查当前内核版本
uname -r
# 查是否在受影响范围
cat /etc/os-release
# 禁用 Copy Fail 缓解模块
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
2. 内核升级
# Debian/Ubuntu
sudo apt update && sudo apt full-upgrade
# RHEL/CentOS
sudo dnf update kernel
# 重启生效
sudo reboot
3. 检测已入侵机器
# 检查是否有提权尝试的迹象
journalctl -k | grep -i " privilege" | tail -20
# 检查新用户
cat /etc/passwd | grep -E "^[a-z]+:x?:0:"
# 检查 sudoers 修改
cat /etc/sudoers
stat /etc/sudoers
# 检查最近添加的 setuid 文件
find / -perm -4000 -type f 2>/dev/null | xargs ls -la
4. 纵深防御
- 启用 SELinux/AppArmor
- 内核运行时防护(LKRG — Linux Kernel Runtime Guard)
- 关键文件完整性监控(AIDE、tripwire)
- 限制普通用户对
/proc、/sys的访问
思维延伸
这三个漏洞有一个共同点:它们都利用了内核深处的机制,不是应用层的小打小闹。
- Copy Fail:内核加密 API 里的"优化"埋下的坑,7年后才被发现
- Dirty Frag:页缓存管理的竞争条件,需要精确时序控制
- CVE-2026-6018/6019:权限检查路径的缺陷
对于防守方来说,这意味着:
- 内核依赖是最难管控的风险 — 内核漏洞直接影响所有进程
- “优化"往往是安全隐患的温床 — 越底层的优化越难 review
- 普通用户权限在 Linux 里并不"普通” — 一旦有 LPE 漏洞,容器/租户隔离立刻被穿透
参考
- Copy Fail 技术分析:https://xint.io/blog/copy-fail-linux-distributions
- Copy Fail 官网:https://copy.fail/
- OSS-Security 邮件列表(CVE-2026-31431):https://www.openwall.com/lists/oss-security/2026/04/29/23
- Dirty Frag CVE分配讨论:https://www.openwall.com/lists/oss-security/2026/05/08/7
- 内核补丁:https://git.kernel.org/stable/c/fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8
- Copy Fail PoC:https://github.com/theori-io/copy-fail-CVE-2026-31431