
カーネル権限昇格エクスプロイト。CVE-2026-31431を悪用し、AF_ALGインターフェースを利用して/bin/suを上書きし、rootシェルを起動します。C実装とトラブルシューティングガイドを含みます。
作者: 0xShe
语言 / Language
CVE-2026-31431 内核权限提升工具指南
0x01 快速开始
部分目标环境未安装 Python,因此本权限提升逻辑已用 C 语言重写。
在您的 Linux 机器或 WSL 上运行以下命令(建议使用 -static 以避免 GLIBC 版本问题):
gcc -static exploit.c -o exploit
2. 部署与执行
将生成的二进制文件上传到目标机器:
chmod +x exploit
./exploit
如果利用成功,程序将自动执行 su 并直接生成一个 root shell,无需输入密码。
0x02 权限提升逻辑:它是如何工作的?
此漏洞利用的是 Linux 内核 AF_ALG 接口(内核加密 API)中的一个逻辑缺陷。
创建加密套接字 程序使用 socket(AF_ALG, ...) 创建一个 AEAD(带关联数据的认证加密)套接字。
内存注入(Splice) 通过利用 Linux 的 splice 系统调用,可以将文件描述符(此处为 /bin/su)中的数据直接重定向到内核加密缓冲区中。
载荷覆盖 利用特定的内存偏移量,该漏洞将 /bin/su 的认证逻辑的一部分替换为权限提升载荷(一个启动 /bin/sh 的最小 ELF 程序)。
触发权限提升 在内核完成一系列加密操作后,内存中的 su 进程已被篡改。当最终执行 system("su") 时,系统实际运行的是被修改后的 root shell 载荷。
0x03 故障排查指南:为什么仍然要求输入密码?
在调试过程中,如果程序输出 Exploit finished 但运行 su 时仍要求输入密码,问题通常由以下细节之一引起。
这是最常见的失败点。sendmsg 调用必须包含 MSG_MORE 标志。
原因: 该标志告知内核还有更多数据即将到达,防止加密缓冲区过早被终结。
后果: 如果没有此标志,内核会立即关闭当前的加密上下文。结果,后续的 splice 注入无法进入正确的内核缓冲区,导致覆盖无法实现。
内核对于 AEAD 关联数据的对齐和长度检查极为严格。
在修改 /bin/su 的循环过程中,每次 splice 操作都必须从偏移量 0 开始读取。
某些系统可能已经应用了静默安全补丁。在多个机器上的测试中已确认这一点——某些目标已经收到了非官方或向后移植的修复。
0x04 注意事项
内核版本: 此漏洞主要影响早期的 5.x Linux 内核(例如 Ubuntu 20.04 的初始版本)。如果内核已被修补,此方法将不再有效。
路径差异: 不同的 Linux 发行版可能将 su 存储在不同的位置(/bin/su 或 /usr/bin/su)。代码会尝试自动检测正确的路径,但如果两者都不存在,请使用 which su 手动确认,并相应修改代码。
免责声明: 本文严格用于技术研究和教育目的。请勿将其用于非法活动。用户应对因滥用此工具而产生的任何法律后果承担全部责任。