CVE-2026-31431 PoC 清单与故障排查 — theori-io copy_fail_exp.py 不工作问题分析

TL;DR:CVE-2026-31431 (Copy Fail) 有多个可用 PoC,但官方 theori-io 版本存在 Python 版本兼容性、路径硬编码等问题。本文汇总各类 PoC 以及常见故障排查方案。


1. PoC 生态概览

1.1 官方 PoC(theori-io)

  • 仓库:theori-io/copy-fail-CVE-2026-31431
  • 脚本:copy_fail_exp.py(732 字节)
  • 特点:原创发现者发布,技术参考价值最高
  • 问题:兼容性限制较多(详见下文故障排查)

1.2 社区改进版本

仓库语言特色功能兼容性
rootsecdev/cve_2026_31431Python检测+利用分离,test_cve_2026_31431.py / exploit_cve_2026_31431.py✓
Naimadx123/cve_2026_31431Python类似 rootsecdev 版本✓
DENNISDGR/CVE-2026-31431-pocPython支持命令行参数,非交互式环境可用✓
Smarttfoxx/copyfailCELF 解析 + splice(),性能优化✓
iss4cf0ng/CVE-2026-31431-Linux-Copy-FailRust支持自定义 shellcode(如 Meterpreter)✓
yuspring/cve-2026-31431-pocPython简化版实现✓

1.3 专用场景 PoC

仓库目标场景技术亮点
Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoCKubernetes 容器逃逸共享镜像层利用,从非特权容器获得节点级代码执行
SpenserCai/copy_fail运行时防御研究Rust PoC + eBPF 防御,LSM/kprobe 双模式阻断
liamromanis101/CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script仅检测安全的脆弱性检测,无破坏性

2. theori-io copy_fail_exp.py 故障排查

2.1 Python 版本兼容性问题

错误症状:

bash
AttributeError: module 'os' has no attribute 'splice'

受影响系统:

  • Debian 11 (Python 3.9.2)
  • Rocky Linux 9.7 (Python 3.9.25)
  • Ubuntu 18.04/20.04 默认 Python
  • 其他 Python < 3.10 的发行版

根本原因: os.splice() 是 Python 3.10 引入的新系统调用接口。旧版本 Python 不支持。

解决方案:

bash
# A. 升级 Python
sudo apt install python3.10  # Ubuntu/Debian
python3.10 copy_fail_exp.py

# B. 使用 pyenv 管理多版本
curl https://pyenv.run | bash
pyenv install 3.11.0
pyenv local 3.11.0
python copy_fail_exp.py

# C. 使用社区兼容版本(推荐)
git clone https://github.com/rootsecdev/cve_2026_31431.git
cd cve_2026_31431
python3 exploit_cve_2026_31431.py

2.2 路径硬编码问题

错误症状:

bash
FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/su'

受影响系统:

  • 较老的 Linux 发行版(su 位于 /bin/su)
  • 某些 minimal 安装

解决方案:

bash
# A. 检查 su 位置
which su

# B. 修改脚本(如果你要用原版)
sed -i 's|/usr/bin/su|/bin/su|g' copy_fail_exp.py

# C. 使用自适应版本
python3 -c "
import subprocess, os
su_path = subprocess.check_output(['which', 'su']).decode().strip()
print(f'su 位于: {su_path}')
"

2.3 内核模块禁用检查

错误症状:

bash
OSError: [Errno 2] No such file or directory
# 或者脚本执行没有效果

可能原因:

  • 已应用 kmod 缓解(algif_aead 被 blacklist)
  • 内核已打补丁
  • SELinux/AppArmor 阻断

检查方法:

bash
# 1. 检查模块是否可加载
sudo modprobe -n -v algif_aead
# 期望: 正常输出模块路径,或报错 "blacklisted"

# 2. 检查 modprobe 配置
grep -r algif_aead /etc/modprobe.d/
cat /proc/modules | grep algif

# 3. 检查内核版本是否已修复
uname -r
# 对比已知修复版本:6.18.22, 6.19.12, 7.0+

# 4. 绕过检查:强制加载(谨慎)
sudo rmmod algif_aead 2>/dev/null
sudo modprobe algif_aead
lsmod | grep algif_aead

2.4 容器环境特殊问题

Docker/Podman:

bash
# 需要特权模式或 capabilities
docker run --privileged -it ubuntu:20.04
# 或
docker run --cap-add=SYS_ADMIN -it ubuntu:20.04

LXC/LXD:

bash
# 检查 security.nesting 是否启用
lxc config get container security.nesting

2.5 Page Cache 污染持久化问题

注意:成功运行 PoC 后,/bin/su 的内存副本被污染,即使卸载模块也会保持 root 权限,直到重启。

验证污染状态:

bash
# 运行 PoC 后检查
sudo rmmod algif_aead
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif_aead.conf

# su 依然可以获得 root(即使模块已禁用)
su  # <- 这里依然是 rootshell

清理:只有重启系统才能清除 page cache 污染。


3. 推荐使用姿势

3.1 安全检测(推荐优先)

bash
# 使用安全检测脚本(无破坏性)
git clone https://github.com/liamromanis101/CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script.git
cd CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script
python3 detect.py

3.2 授权测试场景

bash
# A. 通用兼容版(Python 任意版本)
git clone https://github.com/rootsecdev/cve_2026_31431.git
cd cve_2026_31431
python3 test_cve_2026_31431.py    # 检测
python3 exploit_cve_2026_31431.py # 利用

# B. 高级功能版(自定义 payload)
git clone https://github.com/DENNISDGR/CVE-2026-31431-poc.git
cd CVE-2026-31431-poc  
python3 exploit.py --cmd "id; whoami; uname -a"

# C. 性能优化版(C 实现)
git clone https://github.com/Smarttfoxx/copyfail.git
cd copyfail
make
./copyfail

# D. 容器逃逸测试(K8s 环境)
git clone https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC.git
# 按照 README 在 K8s 环境部署测试

3.3 防御验证

bash
# eBPF 运行时阻断测试
git clone https://github.com/SpenserCai/copy_fail.git
cd copy_fail
# 先启动 eBPF 防御,再测试 PoC 是否被拦截

4. 缓解确认测试

4.1 kmod 缓解验证

bash
# 1. 确认 kmod 版本(Ubuntu)
dpkg -l kmod | awk '/^ii/{print $2,$3}'
# Ubuntu 20.04 ESM: >= 27-1ubuntu2.1+esm1

# 2. 尝试手动加载(应该失败)
sudo modprobe algif_aead
lsmod | grep algif_aead || echo "模块被阻止,缓解生效"

# 3. 使用 PoC 验证(应该失败)
python3 -c "
import socket
s = socket.socket(38, 5, 0)  # AF_ALG
try:
    s.bind(('aead', 'gcm(aes)'))
    print('VULNERABLE: algif_aead 可绑定')
except:
    print('MITIGATED: algif_aead 绑定失败')
"

4.2 内核补丁验证

bash
# 检查当前内核是否包含修复
uname -r
dmesg | grep -i "copy.fail\|algif\|aead"

# Ubuntu Security 查询
curl -s "https://ubuntu.com/security/cves/cve-2026-31431.json" | jq '.releases'

5. 应急响应 checklist

发现可疑利用时:

  • 立即检查 /var/log/kern.log 和 dmesg | grep splice
  • 审计最近的 su / sudo 使用:grep -E "(su|sudo)" /var/log/auth.log
  • 检查异常进程:ps aux | grep -E "(root|euid=0)" | head -20
  • 隔离受影响主机,禁止网络访问
  • 强制重启清除 page cache 污染:sudo reboot
  • 重启后立即应用 kmod 缓解 + 内核升级
  • 审查所有容器镜像,确认基础层是否已修复

6. 参考资源

技术分析

官方修复公告

威胁情报


免责声明:所有 PoC 仅供授权测试使用,严禁用于非法攻击。在生产环境测试前请充分评估风险。

Comments (0)

No comments yet

imfht
May 6, 2026