0xShe/CVE-2026-31431
GitHub: 0xShe/CVE-2026-31431
针对 CVE-2026-31431 的 Linux 内核 AF_ALG 接口本地提权利用工具,通过 splice 注入覆盖 /bin/su 认证逻辑获取 root shell。
Stars: 19 | Forks: 11
作者:0xShe
Language / 语言
- English:
- 中文:
CVE-2026-31431 内核提权工具指南
0x01 快速开始
某些目标环境没有安装 Python,因此该提权逻辑被重写为 C 语言。
1. 编译
在您的 Linux 机器或 WSL 上运行以下命令(建议使用 -static 以避免 GLIBC 版本问题):
```
gcc -static exploit.c -o exploit
```
2. 部署与执行
将生成的二进制文件上传到目标机器:
```
chmod +x exploit
./exploit
```
如果漏洞利用成功,程序将自动执行 su 并直接生成一个 root shell,无需输入密码。
0x02 提权逻辑:它是如何工作的?
此漏洞利用了 Linux 内核的 AF_ALG 接口(Kernel Crypto API)中的一个逻辑缺陷。
1. 创建 Crypto Socket
程序使用 socket(AF_ALG, ...) 创建一个 AEAD(Authenticated Encryption with Associated Data)套接字。
2. 内存注入(Splice)
通过利用 Linux 的 splice 系统调用,可以将来自文件描述符(此处为 /bin/su)的数据直接重定向到内核加密缓冲区。
3. Payload 覆盖
使用特定的内存偏移量,该漏洞利用程序将 /bin/su 的部分身份验证逻辑替换为提权 payload(一个启动 /bin/sh 的最小 ELF 程序)。
4. 触发提权
在内核完成一系列加密操作后,内存中的 su 进程已经被篡改。当最终执行 system("su") 时,系统实际上运行的是被修改过的 root shell payload。
0x03 故障排除指南:为什么仍然提示需要密码?
在调试过程中,如果程序输出 Exploit finished,但运行 su 仍然需要密码,问题通常是由以下细节之一引起的。
1. 关键的 MSG_MORE 标志
这是最常见的失败点。sendmsg 调用必须包含 MSG_MORE 标志。
- 原因:
此标志告诉内核还有更多数据将要发送,防止加密缓冲区过早完成定稿。
- 后果:
如果没有此标志,内核会立即关闭当前的 crypto context。因此,后续的 splice 注入无法进入正确的内核缓冲区,导致覆盖无法进行。
2. 关联数据长度(Assoclen)
内核对 AEAD 关联数据的对齐和长度检查极其严格。
- 陷阱:
如果 C 代码中的 ASSOCLEN 设置为 4 字节,而内核期望的是 8 字节(反之亦然),内核可能会抛出无效参数错误,或者默默地完全跳过注入逻辑。
3. 文件偏移量重置
在修改 /bin/su 的循环中,每次 splice 操作都必须从偏移量 0 开始读取。
- 陷阱:
如果没有将 off_su 显式重置为 0,splice 的行为将类似于 read() 并继续推进文件指针。在第二次迭代中,注入的数据将发生错位,这可能会损坏 su 或破坏漏洞利用逻辑。
4. 内核补丁
某些系统可能已经应用了静默安全补丁。这是在多台机器上测试时确认的——某些目标已经收到了非官方或向后移植的修复。
0x04 注意事项
- 内核版本:
此漏洞主要影响早期的 5.x Linux 内核(例如 Ubuntu 20.04 的初始版本)。如果内核已被修补,此方法将不再有效。
- 路径差异:
不同的 Linux 发行版可能将 su 存储在不同的位置(/bin/su 或 /usr/bin/su)。代码会尝试自动检测正确的路径,但如果两者都不存在,请使用 which su 手动验证并相应地修改代码。
- 免责声明:
本文严格仅用于技术研究和教育目的。请勿将其用于非法活动。用户需对滥用此工具造成的任何法律后果自行承担责任。
CVE-2026-31431 内核提权工具指南
0x01 快速开始
某些目标环境没有安装 Python,因此该提权逻辑被重写为 C 语言。
1. 编译
在您的 Linux 机器或 WSL 上运行以下命令(建议使用 -static 以避免 GLIBC 版本问题):
```
gcc -static exploit.c -o exploit
```
2. 部署与执行
将生成的二进制文件上传到目标机器:
```
chmod +x exploit
./exploit
```
如果漏洞利用成功,程序将自动执行 su 并直接生成一个 root shell,无需输入密码。
0x02 提权逻辑:它是如何工作的?
此漏洞利用了 Linux 内核的 AF_ALG 接口(Kernel Crypto API)中的一个逻辑缺陷。
1. 创建 Crypto Socket
程序使用 socket(AF_ALG, ...) 创建一个 AEAD(Authenticated Encryption with Associated Data)套接字。
2. 内存注入(Splice)
通过利用 Linux 的 splice 系统调用,可以将来自文件描述符(此处为 /bin/su)的数据直接重定向到内核加密缓冲区。
3. Payload 覆盖
使用特定的内存偏移量,该漏洞利用程序将 /bin/su 的部分身份验证逻辑替换为提权 payload(一个启动 /bin/sh 的最小 ELF 程序)。
4. 触发提权
在内核完成一系列加密操作后,内存中的 su 进程已经被篡改。当最终执行 system("su") 时,系统实际上运行的是被修改过的 root shell payload。
0x03 故障排除指南:为什么仍然提示需要密码?
在调试过程中,如果程序输出 Exploit finished,但运行 su 仍然需要密码,问题通常是由以下细节之一引起的。
1. 关键的 MSG_MORE 标志
这是最常见的失败点。sendmsg 调用必须包含 MSG_MORE 标志。
- 原因:
此标志告诉内核还有更多数据将要发送,防止加密缓冲区过早完成定稿。
- 后果:
如果没有此标志,内核会立即关闭当前的 crypto context。因此,后续的 splice 注入无法进入正确的内核缓冲区,导致覆盖无法进行。
2. 关联数据长度(Assoclen)
内核对 AEAD 关联数据的对齐和长度检查极其严格。
- 陷阱:
如果 C 代码中的 ASSOCLEN 设置为 4 字节,而内核期望的是 8 字节(反之亦然),内核可能会抛出无效参数错误,或者默默地完全跳过注入逻辑。
3. 文件偏移量重置
在修改 /bin/su 的循环中,每次 splice 操作都必须从偏移量 0 开始读取。
- 陷阱:
如果没有将 off_su 显式重置为 0,splice 的行为将类似于 read() 并继续推进文件指针。在第二次迭代中,注入的数据将发生错位,这可能会损坏 su 或破坏漏洞利用逻辑。
4. 内核补丁
某些系统可能已经应用了静默安全补丁。这是在多台机器上测试时确认的——某些目标已经收到了非官方或向后移植的修复。
0x04 注意事项
- 内核版本:
此漏洞主要影响早期的 5.x Linux 内核(例如 Ubuntu 20.04 的初始版本)。如果内核已被修补,此方法将不再有效。
- 路径差异:
不同的 Linux 发行版可能将 su 存储在不同的位置(/bin/su 或 /usr/bin/su)。代码会尝试自动检测正确的路径,但如果两者都不存在,请使用 which su 手动验证并相应地修改代码。
- 免责声明:
本文严格仅用于技术研究和教育目的。请勿将其用于非法活动。用户需对滥用此工具造成的任何法律后果自行承担责任。标签:0xShe, AF_ALG, Crypto API, CVE-2026-31431, GLIBC, Kernel Exploit, Linux提权, splice系统调用, Web报告查看器, 二进制漏洞利用, 内存篡改, 内核漏洞, 协议分析, 安全渗透, 客户端加密, 数据展示, 本地提权, 权限提升, 漏洞复现, 红队, 网络安全, 隐私保护, 静态编译