当前位置:首页>Linux>Linux提权漏洞二进制版CVE-2026-31431

Linux提权漏洞二进制版CVE-2026-31431

  • 2026-10-11 08:19:59
Linux提权漏洞二进制版CVE-2026-31431
用golang重写该漏洞exp,直接编译成二进制文件,方便在各种生产环境进行直接测试。
编译了amd64和arm64两个二进制文件

Copy Fail - CVE-2026-31431

Linux 内核 AF_ALG 加密 Socket 子系统漏洞的概念验证利用代码。

技术分析

受影响的发行版

发行版内核版本
Ubuntu 24.04 LTS6.17.0-1007-aws
Amazon Linux 20236.18.8-9.213.amzn2023
RHEL 10.16.12.0-124.45.1.el10_1
SUSE 166.12.0-160000.9-default

漏洞原理

该漏洞位于 Linux 内核加密子系统的 AF_ALG(Algorithm)Socket 接口中。当使用 AEAD(带认证的数据加密)算法时,通过 sendmsg(2) 发送控制消息配合 splice(2) 进行数据传输,内核会错误处理内部加密请求状态,导致越界读/写或使用后释放(UAF)条件。

核心机制

  1. 创建 AF_ALG Socket 并绑定到 authencesn(hmac(sha256),cbc(aes)) 算法

  2. 通过 setsockopt 设置构造的密钥结构和认证标签大小

  3. 使用 sendmsg(2) 发送包含三条控制消息(IV、关联数据、认证大小)的数据包

  4. 通过 splice(2) 将目标文件数据经管道传入 Socket,触发内核状态混乱

  5. 分块迭代完成利用后执行提权操作

项目结构

├── copy_fail_exp.go          # Go 语言实现(主文件)
├── pybak/
│   ├── copy_fail_exp.py      # 原始 Python 实现(10 行压缩版)
│   └── README.md             # 原始项目说明
├── build/                    # 编译产物
│   ├── CVE-2026-31431_linux_amd64
│   └── CVE-2026-31431_linux_arm64
├── Makefile                  # 构建脚本
├── go.mod                    # Go 模块定义
└── README.md                 # 本文件

构建

环境要求

  • Go 1.22+

  • Linux 内核(支持 AF_ALG crypto API)

编译命令

# 编译当前平台
go build -o CVE-2026-31431 .

# 交叉编译所有 Linux 平台(amd64, arm64, 386)
make build-linux

# 直接运行
make run
# 或
go run .

# 清理
make clean

构建产物输出到 build/ 目录,二进制文件经过 strip 裁剪。

技术参考

关键常量

常量值说明
AF_ALG38算法 Socket 族
SOL_ALG279ALG Socket 选项级别
ALG_SET_KEY1设置密钥
ALG_SET_AEAD_AUTHSIZE5设置 AEAD 认证大小
MSG_MORE32768发送标志:后续还有数据

控制消息

每次 sendmsg 发送三条 cmsghdr 控制消息(level 279):

类型数据用途
34 字节零IV
20x10 + 19 字节零关联数据 (AAD)
40x08 + 3 字节零认证标签大小

缓解措施

  • 升级到已修复此漏洞的内核版本

  • 通过 seccomp 或 LSM 限制 AF_ALG Socket 访问

  • 监控加密 Socket 上的异常 splice(2) 行为

免责声明

本代码及程序仅供安全研究和教育目的使用,仅应在授权的安全测试环境中运行。作者不对任何滥用行为负责。

下载地址:
关注本公众号回复 CVE-2026-31431 即可下载

最新文章

随机文章