fuukliam/vivo-x-fold6-ghostlock

GitHub: fuukliam/vivo-x-fold6-ghostlock

该项目研究将 CVE-2026-43499(GhostLock)内核漏洞 exploit 移植到 vivo X Fold6 设备,目前卡在 KASLR slide 绕过阶段。

Stars: 0 | Forks: 0

# vivo X Fold6 (V2545A) — GhostLock 临时 root 研究 ## 项目状态 | 项目 | 状态 | |------|------| | 漏洞检测 | ✅ CVE-2026-43499 存在,内核 6.12.58 < 6.12.86 | | boot.img 获取 | ✅ 已从 OTA 全量包提取当前系统内核 | | 偏移量计算 | ✅ vmlinux.elf 转换成功,nm 提取全部符号 | | target.h | ✅ 精确偏移量,100% 匹配 g0a092cc0037a | | preload.so 编译 | ✅ NDK r29 编译成功 | | KASLR slide | ❌ 卡住 — vmlinux-to-elf 无法恢复完整 slide 逻辑 | | 临时 root | ❌ 未实现 | ## 设备信息 型号: vivo X Fold6 (V2545A / PD2545) CPU: 天玑 9500 超能版 (Dimensity 9500 Super), SoC: mt6993, 8核 RAM: 12GB LPDDR5X Ultra ROM: 256GB UFS 4.1 OS: Android 16 (API 36) + OriginOS 6 Fold Build: BP2A.250605.031.A3_V000L1 / PD2545_A_16.0.14.15.W10 内核: 6.12.58-android16-6-g0a092cc0037a-abogki521987229-4k SELinux: Enforcing ADB: platform-tools 37.0.1 ## 漏洞原理 CVE-2026-43499 (GhostLock) 是 Linux 内核 futex PI (Priority Inheritance) 子系统中的一个 use-after-free 漏洞。 **NebuSec IonStack exploit 利用链**: 1. futex PI chain 设置 (waiter/owner/consumer 三线程) ↓ 2. FUTEX_CMP_REQUEUE_PI → waiter 被移出原链 → 栈上 waiter 结构体变 stale ↓ 3. pselect() 调用 → 内核将 fd_set 从用户态拷贝到内核栈 ↓ (期望 fd_set 重叠覆盖 stale waiter) 4. 栈上的 fake waiter 包含构造的内核地址 (nfulnl_logger 等) ↓ 5. 读 /proc/sys/kernel/random/boot_id → 若泄漏内核指针 → 算出 KASLR 基址 ↓ 6. 建立 pipe-physrw 读写原语 → commit_creds(prepare_kernel_cred(0)) → uid=0 ## 当前卡点:KASLR Slide 失败 ### 症状 [+] build config label=v2545a_16.0.14.15 slide=pselect main=pselect [+] p0 profile ... [+] slide child context route=pselect pid=XXXXX → exit code 255 (安全退出,未提权) boot_id 输出为正常 UUID 格式,不包含内核指针,证明 pselect 的 fd_set 栈覆盖**完全没有生效**。 ### 根因分析 NebuSec 的 slide 机制依赖 pselect 的 fd_set 拷贝恰好覆盖到栈上已释放的 futex PI waiter 结构体。这个重叠位置是**内核版本和编译选项相关**的: | 内核 | slide 状态 | |------|-----------| | Pixel GKI 6.1 (NebuSec 默认) | ✅ fd_set 与 waiter 精确重叠 | | Pixel 10 GKI 6.12 (tokay) | ✅ 使用 `PSELECT_WAITER_WORD_SHIFT=1` 微调 | | vivo X Fold5 (6.1, 骁龙) | ❌ 博客证实失败 | | vivo X Fold6 (6.12, 天玑9500) | ❌ **本文研究对象** | ### 已尝试的修复方向 | 方向 | 结果 | |------|------| | 精确偏移量 (nm/vmlinux-to-elf) | ✅ 偏移量 100% 正确,但 slide 仍失败 | | NFDS 调整 (256 → 320) | ❌ waiter words 放不下 / 不重叠 | | pselect sigmask 参数 | ❌ sigmask 加在不同栈帧,未移动 fd_set | | WORD_SHIFT 暴力测试 (-5~7) | ⚠️ -5/-4/2 导致 kernel panic,其余安全退出 | | 反汇编静态分析栈深度 | ❌ BOLT+LTO 优化导致函数被肢解,难以追踪 | ## 仓库结构 ├── README.md # 本文档 ├── exploit/ │ ├── slide.c # 修改后的 slide.c (支持运行时 SLIDE_SHIFT) │ └── targets/ │ └── xfold6-mt6993/ │ └── target.h # X Fold6 精确偏移量配置 (含 _OFF 和 _IMAGE) ├── scripts/ │ ├── kernel_stack_analyzer.py # 内核栈深度分析脚本 │ └── bruteforce_wordshift.sh # WORD_SHIFT 暴力测试脚本 ├── notes/ │ └── findings.md # 完整研究笔记和时间线 └── artifacts/ └── offsets.txt # 内核符号偏移量清单 ## 依赖 本仓库不包含 NebuSec 原始 exploit 的全部源码,仅包含我们修改和新增的文件。使用前需要先克隆原始仓库: # 1. 克隆 NebuSec 原始 exploit git clone --depth 1 https://github.com/NebuSec/CyberMeowfia.git cd CyberMeowfia/IonStack/CVE-2026-43499/exploit # 2. 将本仓库的文件覆盖到对应位置 # - slide.c → src/slide.c # - target.h → src/targets/xfold6-mt6993/target.h cp /path/to/this/repo/exploit/slide.c src/ mkdir -p src/targets/xfold6-mt6993 cp /path/to/this/repo/exploit/targets/xfold6-mt6993/target.h src/targets/xfold6-mt6993/ # 3. 编译 export ANDROID_NDK_HOME="$HOME/android-ndk-r29" export NDK_ROOT="$ANDROID_NDK_HOME" export NDK_TOOLCHAIN="$NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64" make clean && make PROJECT=xfold6-mt6993 API=35 # 输出: build/xfold6-mt6993/bin/preload.so ## 测试方法 # 推送 adb push preload.so /data/local/tmp/ # 测试 (默认 shift=0) adb shell "LD_PRELOAD=/data/local/tmp/preload.so /system/bin/id" # 测试带 WORD_SHIFT adb shell "SLIDE_SHIFT=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/id" ## 安全说明 - **临时 root**: 不改分区,重启即失,0 变砖风险 - **永久解锁 BL**: 需额外刷写 lk.bin + misc 分区,有风险,本仓库不提供 - 本仓库仅用于安全研究和学习目的 ## 致谢 - [NebuSec / VEGA Team](https://github.com/NebuSec/CyberMeowfia) — 发现 CVE-2026-43499 并公开 exploit - [xuanyuan-blog](https://www.xuanyuan-blog.top/2026/07/13/Porting-IonStack-to-the-vivo-X-Fold5/) — vivo X Fold5 移植经验 - Google kernelCTF — $92,337 bounty
标签:Android提权, futex, vivo, Web报告查看器, 云资产清单, 内核漏洞, 客户端加密, 应用安全, 目录枚举, 移动安全, 逆向工具, 逆向工程