CVE-2026-43499 (GhostLock) —— Linux 内核 futex 优先级继承
释放后使用本地权限提升 PoC,已移植到 OPPO PCKM00
(OP4A57、SM6150、Android 11、内核 4.14.180-perf+)。
免责声明
本项目仅用于授权的安全研究与教育目的。请勿在非本人所有或未获明确授权的设备上使用。运行利用可能导致内核崩溃,作者不承担任何滥用或损失的责任。
CVE-2026-43499 (GhostLock) 是 Linux 内核 futex 中的一处释放后使用漏洞,
位于优先级继承代码中。该 bug 存在于 remove_waiter() 被误用
于 rt_mutex_start_proxy_lock() 的代理锁回滚路径。被释放的
rt_mutex_waiter(分配在内核栈上)被重新解释为
由 pselect() 复制进来的攻击者可控 fd_set,从而产生一个
任意写原语。
影响范围: Linux 4.x–6.x(2011 年引入)。4.14 系列完全
受影响。完整分析和已验证的符号偏移见 report.md。
futex requeue-pi UAF
└─> pselect fd_set stack copy (fake rt_mutex_waiter / fake task)
└─> arbitrary write (rt_mutex tree ops / sched_setattr)
└─> overwrite ashmem_fops -> configfs bin read/write
└─> pipe_buffer page rewrite (physical RW primitive)
└─> patch current task cred -> root
该 PoC 通过 LD_PRELOAD 完全在用户空间运行——无需重启设备
(除非内核崩溃)。
移植到其他 4.14 设备:复制
exploit/targets/oppo-pckm00/target.h并从内核镜像重新生成符号偏移(参见analysis/)。
.
├── report.md # Full vulnerability analysis & verified offsets
├── exploit/
│ ├── Makefile # Build preload.so (Windows NDK / WSL)
│ ├── src/
│ │ ├── preload.c # LD_PRELOAD entry + forced disk logging + su
│ │ ├── main.c # Orchestration (waiter/owner/consumer threads)
│ │ ├── slide.c # KASLR leak (boot_id / nfulnl loggers)
│ │ ├── fops.c # ashmem_fops overwrite + configfs primitive
│ │ ├── pipe.c # pipe_buffer physrw primitive
│ │ ├── root.c # task walk + cred patch + seccomp/selinux
│ │ ├── util.c # kernelsnitch, skb page prep, kernel RW
│ │ ├── su_daemon.c # embedded su server (drop-in)
│ │ ├── su_blob.S # .incbin of su_daemon
│ │ └── wallpaper_blob.S # .incbin of wallpaper payload
│ ├── targets/oppo-pckm00/target.h # 4.14.180 symbol/struct offsets
│ └── assets/wallpaper.webp # embedded wallpaper payload
├── analysis/ # kernel image / kallsyms extraction scripts
└── LICENSE # Apache-2.0 (same as upstream GhostLock)
需要 Android NDK r29(aarch64-linux-android30-clang)。
set NDK=C:\path\to\android-ndk-r29
make NDK=%NDK%
# put NDK at /opt/ndk/android-ndk-r29 (linux-x86_64 toolchain)
cd exploit
make wsl
# or directly:
bash ../analysis/build_preload.sh
输出:exploit/preload.so(64 位 aarch64 ELF 共享对象)。
构建还会将 su_daemon.c 编译为 PIE 二进制,并把它(连同
壁纸)通过 .S 数据块嵌入到 .so 中。
adb push exploit/preload.so /data/local/tmp/preload.so
adb shell LD_PRELOAD=/data/local/tmp/preload.so id
成功时 shell 会报告 uid=0(root)。su 守护进程会被安装到
/apex/com.android.virt/bin/su(回退到 /data/local/tmp/su),并且
会应用内置壁纸,作为持久化/验证标记。
所有 pr_* 诊断信息也会写入
/sdcard/Download/log_<timestamp>.txt(回退到
/data/local/tmp/log_<timestamp>.txt),每行都执行 O_SYNC + fsync(),
这样日志在内核崩溃/重启后仍能保留——使用以下命令拉取:
adb pull /sdcard/Download/log_*.txt
KASLR:该 PoC 通过 boot_id/nfulnl 日志路径(slide.c)泄露 KASLR 偏移,
并通过 ashmem_fops 校验(fops.c)。
本移植中处理的 4.14 与 6.x 差异:
.read/.write(没有 read_iter/write_iter),ashmem_fops 没有 show_fdinfo,generic_file_splice_read 替代 copy_splice_read,selinux_enforcing 位于 struct selinux_state 内部,rt_mutex_waiter / / 布局。IonStack/CVE-2026-43499),Apache-2.0。
https://github.com/NebuSec/CyberMeowfiaApache-2.0 —— 参见 LICENSE。
| 字段 | 值 |
|---|
| 设备 | OPPO PCKM00 / OP4A57 |
| SoC | Qualcomm SM6150 |
| Android | 11 (RKQ1.200903.002) |
| 安全补丁 | 2022-09-05 |
| 内核 | 4.14.180-perf+ (arm64, clang 10.0.7) |
| 构建版本 | OPPO/PCKM00/PCKM00:11/RKQ1.200903.002/1635513065:user/release-keys |
pipe_inode_infocred部分结构体偏移(如 task_struct.seccomp)为尽力而为;未能修补
seccomp 并不会阻止通过覆盖 cred 获取 root。
运行漏洞利用可能触发内核崩溃(在目标设备上约 5 秒内成功率约 97%);请使用 隔离设备。