针对OPPO MT6835 Android设备的CVE-2026-43499漏洞的概念验证利用链,包含预加载载荷、构建系统和用于防御性研究的分析笔记。
GhostLock:Linux 内核 futex PI 释放后使用漏洞,CVE-2026-43499。 攻击者利用 PI-futex 依赖循环触发竞态条件,在启用
CONFIG_FUTEX_PI=y的内核上实现本地权限提升。目标:OPPO PLS120 (OP5E1C) — Android 17,内核
5.15.180-android13-8-o-g7b9cfca06464分析环境:Ubuntu 24.04 x86_64 + Android NDK r29(clang 21.0.0,API 35)
本项目研究在 OPPO PLS120 (OP5E1C) 设备上利用 GhostLock (CVE-2026-43499) 获取 root 权限的可行性。通过系统性地验证所有已知的 KASLR 泄露路径,确认该设备的安全加固组合构成了不可绕过的防护链。
| 阶段 | 状态 | 说明 |
|---|---|---|
| 阶段一:boot.img 分析 & 符号提取 | ✅ 完成 | 从 OTA 包提取 boot.img → vmlinux-to-elf 重建符号表 (159,668 个符号) |
| 阶段二:preload.so 编译 | ✅ 完成 | Android NDK r29 交叉编译,强制实时写盘日志机制 |
| 阶段三:故障诊断与迭代修复 | 🔄 进行中 | 已修复 MM_STRUCT_SZ、MTE 支持、SLIDE 跳过逻辑 |
OPPO PLS120 的安全加固全面封锁了 exploit 链条:
| 加固项 | 影响 |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | 阻止 KernelSnitch slab 碰撞 |
CONFIG_KASAN_HW_TAGS=y (MTE) | 地址标签增加 bruteforce 复杂度 |
CONFIG_CFI_CLANG=y | 控制流完整性 |
| SELinux shell 域策略 | 阻止 perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | 阻止 PR_SET_MM_MAP 路径 |
| wchan 修复 backport | 阻止 /proc/<pid>/stat 泄露内核 VA |
| 方案 | 状态 | 原因 |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (SELinux shell 域封锁) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat field 35) | ❌ | 内核已应用 v5.16 修复 (返回 1 而非内核 VA) |
| SLIDE 侧信道 (boot_id 覆写) | ❌ | nfulnl 模块不可加载 |
| PR_SET_MM_MAP 栈回收 | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (futex hash timing) | ⚠️ 偶发成功 | 大.LITTLE 时序噪声影响稳定性 |
SLIDE_MAX_ATTEMPTS=1 跳过 SLIDE 死循环!route_signal 立即 break,允许 24 次重试本项目研究在 OPPO PLS120 (OP5E1C) 设备上利用 GhostLock (CVE-2026-43499) 获取 root 权限的可行性。在系统性地测试所有已知的 KASLR 泄露路径后,该设备的安全加固配置构成了针对此漏洞利用的不可绕过防护链。
| 阶段 | 状态 | 描述 |
|---|---|---|
| 阶段 1:boot.img 分析 | ✅ 完成 | 从 OTA 提取 boot.img → vmlinux-to-elf 符号重建(159,668 个符号) |
| 阶段 2:preload.so 构建 | ✅ 完成 | 使用 Android NDK r29 交叉编译,强制实时磁盘日志记录 |
| 阶段 3:诊断与迭代 | 🔄 进行中 | 修复 MM_STRUCT_SZ、MTE 支持、SLIDE 绕过逻辑 |
OPPO PLS120 在多个层面阻断了漏洞利用链:
| 加固特性 | 影响 |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | 阻止 KernelSnitch 的 slab 碰撞 |
CONFIG_KASAN_HW_TAGS=y (MTE) | 地址标签增加暴力破解复杂度 |
CONFIG_CFI_CLANG=y | 控制流完整性 |
| SELinux shell 域策略 | 阻止 perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | 阻止 PR_SET_MM_MAP 路径 |
| wchan 修复回溯移植 | 阻止 /proc/<pid>/stat 内核虚拟地址泄漏 |
| 方法 | 状态 | 原因 |
|---|---|---|
| perf_event_open 调用链 | ❌ | EACCES(SELinux shell 域) |
| /proc/kallsyms | ❌ | EACCES(kptr_restrict + SELinux) |
| wchan(/proc/<pid>/stat 第 35 字段) | ❌ | 内核已回溯移植 v5.16 修复(返回 1 而非内核虚拟地址) |
| SLIDE 侧信道(boot_id 覆写) | ❌ | nfulnl 模块无法加载 |
| PR_SET_MM_MAP 栈回收 | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch(futex 哈希计时) | ⚠️ 间歇性 | big.LITTLE 计时噪声影响稳定性 |
SLIDE_MAX_ATTEMPTS=1 跳过 SLIDE 死锁!route_signal 提前退出,允许 24 次重试/home/ubuntu/CyberMeowfia/
├── devices/ # Target device artifacts (OTA zip, config.gz, etc.)
├── work_bootimg/ # boot.img analysis output
│ └── oppo/ # OPPO-specific kernel data
│ ├── kernel.dec # Decompressed ARM64 Image (47MB)
│ ├── vmlinux_extracted.elf # Reconstructed vmlinux with symbols (159,668)
│ ├── kallsyms_oppo.txt # Full symbol table
│ └── kernel_config_oppo # Kernel .config (189KB)
├── IonStack/CVE-2026-43499/exploit/ # Exploit source code
│ ├── src/ # Source files (slide.c, fops.c, main.c, etc.)
│ │ ├── kernelsnitch/ # KernelSnitch futex hash timing module
│ │ └── targets/
│ │ └── oppo-pls120-BP2A.250605.015/ # OPPO-specific target configuration
│ └── build/ # Compiled binaries
├── unpack_bootimg.py # Python boot.img unpacker (v3/v4)
├── report.md # Phase 1 analysis report (Chinese)
├── GhostLock_CVE202643499_OPPO_PLS120_研究报告.md # Full research report (Chinese, 620 lines)
└── CVE202643499.txt # Research plan document
| 文件 | 描述 |
|---|---|
report.md | 第一阶段分析:boot.img 解包、vmlinux 提取、偏移验证 |
GhostLock_CVE202643499_OPPO_PLS120_研究报告.md | 完整研究报告:完整流程、所有迭代、失败分析、结论(620 行) |
位于 IonStack/CVE-2026-43499/exploit/src/targets/oppo-pls120-BP2A.250605.015/target.h:
| 参数 | 值 |
|---|---|
KIMAGE_TEXT_BASE | 0xffffffc008000000 |
MM_STRUCT_SZ | 0x3e8(1000 字节,已从 mm_cache_init 验证) |
KERNELSNITCH_MTE_ENABLED | 1(启用 MTE 地址标签搜索) |
KSNITCH_COLLISIONS | 2(big.LITTLE 容差) |
KERNELSNITCH_MAX_MISMATCH | 1(时序噪声容差) |
SLIDE_MAX_ATTEMPTS | 1(nfulnl 不可用,跳过至 FOPS 路径) |
KERNEL_PAGE_SETUP_ATTEMPTS | 6 |
SLIDE_KERNEL_PAGE_SETUP_ATTEMPTS | 12 |
FOPS_KERNEL_PAGE_SETUP_ATTEMPTS | 72 |
# Cross-compilation for ARM64 Android
# Requires Android NDK r29 installed at /home/ubuntu/android-ndk-cache/android-ndk-r29/
# Build preload.so for OPPO PLS120
cd IonStack/CVE-2026-43499/exploit
export ANDROID_NDK_HOME=/home/ubuntu/android-ndk-cache/android-ndk-r29
make PROJECT=oppo-pls120-BP2A.250605.015 preload
# Build for default Pixel target
make PROJECT=blazer-CP2A.260605.012 preload
| 资源 | 链接 |
|---|---|
| GhostLock 漏洞详情 | Mallory AI |
| IonStack 第二部分技术文章 | NebuSec AI |
| KernelSnitch 堆 KASLR 泄露 | Lukas Maar |
| CVE-2026-43499 源码 | GitHub NebuSec |
状态:❌ 由于多层安全加固,OPPO PLS120 无法通过 GhostLock(CVE-2026-43499)进行利用。研究产物已保留,可供加固程度较低的设备使用。