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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script — CVE-2026-31431(Copy Fail)检测脚本,用于检查内核版本、补丁存在情况、内核配置、AF_ALG 套接字可用性、setuid 二进制文件及缓解措施,以确定 Linux 系统上的漏洞状态。 | Kitploit
工具/GitHubGitHub/liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script
云基础设施安全漏洞扫描器容器安全漏洞分析配置审计DevSecOps入侵检测事件响应

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script

CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script

CVE-2026-31431(Copy Fail)检测脚本,用于检查内核版本、补丁存在情况、内核配置、AF_ALG 套接字可用性、setuid 二进制文件及缓解措施,以确定 Linux 系统上的漏洞状态。

查看仓库
25284个月前Kitploit 审核通过

CVE-2026-31431 — Copy Fail — 漏洞检测脚本

仅检测。可用的 PoC 已存在于 copy.fail/#exploit。 此脚本面向系统管理员和安全团队,用于确定自身是否受影响——或在修补后是否仍然受影响。


这是什么?

2026年4月29日,一个名为 Copy Fail(CVE-2026-31431)的漏洞由 Xint 代码研究团队公开披露。这是一个逻辑缺陷,自大约 2017年 起便悄然存在于 Linux 内核中——近十年之久——它允许任何非特权本地用户获取 root 权限。

不是"在特定条件下、靠点运气和顺风才能获取 root"。而是……直接获取 root。稳定可靠。几乎在所有主流 Linux 发行版上皆如此。

它影响 Ubuntu、Amazon Linux、RHEL、SUSE,以及任何在过去约8年内运行主流内核的系统。同一脚本,无需重新编译,无需针对各发行版进行调整。

是的,情况确实如听起来那么严重。

工作原理简述

Linux 内核有一个加密子系统,非特权用户可通过 AF_ALG 套接字访问。其中有一种名为 splice() 的机制,可以将文件数据直接送入该子系统而无需复制——这意味着内核内存中缓存的文件副本("页缓存")最终会进入加密操作。

其中一种特定算法——authencesn,用于 IPsec 扩展序列号——有一个特性:它将输出缓冲区用作临时空间,并在应写入位置之外多写入4字节。通常情况下无害。但当来自 setuid 二进制文件(如 /usr/bin/su)的页缓存页面因 algif_aead.c 中2017年的"优化"而链接到该输出缓冲区时,这4字节会直接落入内核缓存的二进制文件副本中。

操作会以错误失败。内核永远不会将该页标记为脏页。磁盘上的文件不受影响。检查磁盘校验和的文件完整性工具看不到任何异常。

但页缓存才是被执行的。而 su 是 setuid root。

完整技术文章位于 xint.io,确实值得一读。


脚本检查内容

Python 脚本 — 13项检查

原始发布版本中的7项,加上为弥补检测缺口而新增的6项检查:

Shell 脚本 — 10项检查

Bash 脚本覆盖相同的核心检测逻辑,但省略了3项 Python 特定检查:

Shell 脚本中不存在(与 Python 相比):

缺失的检查项原因
CONFIG_CRYPTO_USER_API_AEAD尚未实现——计划中
Python os.splice 可用性不适用于 shell 脚本
root 用户警告尚未实现——计划中

两个脚本都不会修复任何问题,也不会利用任何漏洞。它们只是如实告知你系统的真实状况,以便你采取行动。


要求

  • Python 3.6+
  • 无外部依赖——仅使用标准库
  • 无需 root 权限 (有意为之——我们检查的是非特权攻击者能看到的内容)
  • 建议:以非 root 用户运行——某些检查(AF_ALG 套接字、setuid stat)对 root 用户始终成功,会产生误报

使用方法

root@kitploit:~
# 克隆或下载脚本,然后:
python3 cve-2026-31431-detect.py

就这么简单。输出彩色报告,末尾附有摘要。

退出码

脚本在发现易受攻击条件时以非零码退出,适合在流水线中使用:

代码含义
0未发现易受攻击条件
1发现一个或多个易受攻击条件
root@kitploit:~
# 示例:若主机易受攻击则使 CI 步骤失败
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
  echo "VULNERABLE — block deployment"
elif [ $rc -ne 0 ]; then
  echo "ERROR — script failed to complete (exit $rc)"
fi

输出示例

root@kitploit:~
CVE-2026-31431 'Copy Fail' — Vulnerability Detection
authencesn page cache corruption / local privilege escalation
Running as uid=1001, euid=1001

=== Kernel Version ===
  [VULNERABLE] Kernel version
          Reason : Kernel is in the vulnerable range (4.10 – 6.14)
          Detail : Release: 6.12.0-124.45.1.el10_1 — patch status must be confirmed

=== CONFIG_CRYPTO_AUTHENC (Kernel Config) ===
  [VULNERABLE] CONFIG_CRYPTO_AUTHENC
          Reason : Built as module (=m): auto-loads on AF_ALG bind(); modprobe blacklist is the correct mitigation

=== CONFIG_CRYPTO_USER_API_AEAD (Kernel Config) ===
  [VULNERABLE] CONFIG_CRYPTO_USER_API_AEAD
          Reason : AF_ALG AEAD interface is a loadable module — unprivileged users can access the crypto subsystem via AF_ALG sockets

...

  SYSTEM IS LIKELY VULNERABLE TO CVE-2026-31431

  Recommended actions:
    1. Apply your distribution's kernel update for CVE-2026-31431
    2. Until patched, blacklist the module:
         echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
         rmmod algif_aead 2>/dev/null
       NOTE: this is ONLY effective when CONFIG_CRYPTO_AUTHENC=m (module).
       If CONFIG_CRYPTO_AUTHENC=y (built-in), patching is the only fix.

Shell 版本(适用于 DevSecOps 流水线)

提供了一个配套的 Bash 脚本(cve-2026-31431-detect.sh),适用于没有 Python 或更倾向于使用 shell 原生工具的环境。它执行 13项检查中的10项——有关差异详情,请参阅上方的检查对比表。

root@kitploit:~
# 基本运行
bash cve-2026-31431-detect.sh

# JSON 输出——适用于 SIEM 摄取、Ansible facts、日志聚合
bash cve-2026-31431-detect.sh --json > scan-results.json

# 静默模式——仅打印摘要(适用于 CI 日志)
bash cve-2026-31431-detect.sh --quiet

# 禁用 ANSI 颜色(适用于日志文件)
bash cve-2026-31431-detect.sh --no-colour

Shell 脚本使用相同的退出码(0 = 正常,1 = 易受攻击),并生成等效的 JSON 输出供流水线消费。当系统上存在 Python 3 时,shell 脚本会使用它执行实时的 AF_ALG 套接字测试;否则回退到内核配置推断。


修复方法

真正的修复是修补内核。 请查看您发行版的安全公告。

发行版查看位置
Ubuntuubuntu.com/security/CVE-2026-31431
RHEL / Amazon Linuxdnf update kernel
SUSE

临时缓解措施(仅限模块构建)

如果 CONFIG_CRYPTO_AUTHENC 检查报告为 =m(构建为模块而非内建),您可以将其加入黑名单:

root@kitploit:~
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null

重要提示: 如果 CONFIG_CRYPTO_AUTHENC=y(内建),此缓解措施无效。在这种情况下,修补内核是唯一修复方法。脚本中的 CONFIG_CRYPTO_AUTHENC 检查会告诉您属于哪种情况。请注意,CONFIG_CRYPTO_AUTHENC 是正确的内核配置键——它通过单一选项同时构建 authenc 和 authencesn 模块。

如果您正在使用 IPsec,此操作可能会产生影响——在全面部署前请先验证。

上游修复

上游修复是此提交——它回退了 algif_aead.c 中2017年的原地 AEAD 优化,将源和目标的 scatterlist 分离,使页缓存页面不再可能落入可写目标中。


容器和虚拟机

如果您在 Docker 容器、Kubernetes Pod 或其他容器环境中运行此脚本,脚本会发出警告:容器共享宿主内核。漏洞存在于内核中,而非容器镜像中。您必须评估并修补宿主。


DevSecOps 集成示例

root@kitploit:~
# GitHub Actions
# 当脚本以退出码1退出时,该步骤将自然失败并阻止流水线。
# 无需额外配置——非零退出码默认使步骤失败。
- name: Check CVE-2026-31431
  run: |
    python3 cve-2026-31431-detect.py
    rc=$?
    if [ $rc -eq 1 ]; then
      echo "VULNERABLE — pipeline blocked"
      exit 1
    elif [ $rc -ne 0 ]; then
      echo "ERROR — detection script failed to complete (exit $rc)"
      exit $rc
    fi
root@kitploit:~
# Ansible
# 使用 playbook_dir 确保脚本路径正确解析。
# failed_when 检查任何非零退出(漏洞或脚本错误)。
- name: Check for CVE-2026-31431
  script: "{{ playbook_dir }}/cve-2026-31431-detect.py"
  register: cve_check
  failed_when: cve_check.rc != 0
root@kitploit:~
# Nagios / 监控检查(shell 脚本——原生支持退出码)
bash cve-2026-31431-detect.sh --quiet
# exit 0 = OK, exit 1 = CRITICAL (vulnerable)
root@kitploit:~
# 用于 SIEM / 日志聚合的 JSON 输出(shell 脚本)
bash cve-2026-31431-detect.sh --json --quiet > /var/log/cve-2026-31431-$(hostname)-$(date +%Y%m%d).json

披露时间线

感谢 Theori 的 Taeyang Lee 提供原始研究洞见,以及 Xint 代码研究团队完成完整披露文章。


贡献

发现误报?有遗漏的发行版?有应检查的内核配置?欢迎提交 PR。目标是准确的信号,而不仅仅是吓人的红色文字。

免责声明

此工具按原样提供,用于防御性安全目的。请仅将其指向您有权评估的系统。别乱来。

下载工具
#检查项检查内容
1内核版本该内核是否处于受影响范围(4.10–6.14)?
2补丁存在性修复提交是否实际存在于当前运行的内核中?
3algif_aead 模块易受攻击的模块是否已加载或可加载?
4CONFIG_CRYPTO_AUTHENC (新增)CONFIG_CRYPTO_AUTHENC 是内建(=y)还是模块(=m)?此单一选项同时构建 authenc 和 authencesn。内建意味着 modprobe 黑名单缓解措施无效。
5CONFIG_CRYPTO_USER_API_AEAD (新增)AF_ALG AEAD 用户空间接口是否已编译进内核?若未编译,则整个利用路径在编译时即被关闭。
6AF_ALG 套接字非特权用户当前能否打开一个?
7Python os.splice纯 Python 利用路径是否可用?
8Setuid 二进制文件系统上存在的可读 setuid-root 目标扩展列表。
9缓解措施AppArmor、SELinux、seccomp——已部署哪些?
10用户命名空间 (新增)是否启用了非特权用户命名空间?(不直接阻止 Copy Fail,但影响更广泛的本地提权攻击面。)
11透明大页 (新增)THP 状态——可能影响页缓存对齐和利用可靠性。
12环境检测 (新增)Docker/容器/虚拟机上下文——容器共享宿主内核;需要修补的是宿主。
13root 用户警告 (新增)若以 root 身份运行则发出警告,因为多项检查对 root 用户会产生误报,无论非特权限制如何。
#检查项备注
1内核版本
2补丁存在性
3algif_aead 模块
4AF_ALG 套接字若可用则借助 Python 作为辅助;否则回退到内核配置推断
5Setuid 二进制文件扩展列表,与 Python 版本相同
6缓解措施AppArmor、SELinux、seccomp
7CONFIG_CRYPTO_AUTHENC
8用户命名空间
9透明大页
10环境检测
zypper update kernel-default
Debianapt update && apt upgrade
日期
事件
2026-03-23报告给 Linux 内核安全团队
2026-03-24确认收到
2026-03-25提出并审查补丁
2026-04-01修复提交至主线内核
2026-04-22分配 CVE-2026-31431
2026-04-29公开披露