
OPPO Find X6 Pro GhostLock (CVE-2026-43499) adaptação de exploit
Este projeto realiza pesquisa de adaptação para a vulnerabilidade CVE-2026-43499 (GhostLock) no OPPO Find X6 Pro (PGEM10).
Baseado na arquitetura do exploit original do NebuSec CyberMeowfia, e referenciando a abordagem de adaptação do oppo-ghostlock.
| Item | Valor |
|---|---|
| Dispositivo | OPPO Find X6 Pro (PGEM10) |
| Chip | Snapdragon 8 Gen 2 (SM8550) |
| Kernel | Linux 5.15.149-android13 #1 SMP PREEMPT |
| Data de Compilação | Thu Feb 13 2025 |
| Android | 15 (ColorOS 15.0) |
| Versão da ROM | PGEM10_15.0.0.600(CN01) |
| PAC | CONFIG_ARM64_PTR_AUTH_KERNEL=y |
| BTI | CONFIG_ARM64_BTI_KERNEL=y |
| KASLR | CONFIG_RANDOMIZE_BASE=y |
| VA_BITS | 39 |
| Deslocamento VA | P0_PAGE_OFFSET = 0xffffff8000000000 |
| Módulo | Status | Descrição |
|---|---|---|
| Perf KASLR bypass | ✅ | Avanço principal — através de amostragem perf_event_open + callchain, obtém o KASLR slide atual em <1s |
| Correção MM_STRUCT_SZ | ✅ | Corrigido de 0x500 para 0x400 (1024B), KernelSnitch bem-sucedido imediatamente |
| Verificação completa de offsets IDA | ✅ | Todos os símbolos/estruturas/funções críticos foram verificados via IDA |
| FUTEX_CMP_REQUEUE_PI | ✅ | Disparo do GhostLock UAF bem-sucedido |
| Verificação ashmem | ✅ | C ashmem disponível, caminho de type confusion teoricamente viável |
| Análise de cadeia de chamadas | ✅ | Confirmado que não há profundidade de cadeia de chamadas ≥ 0x800 no kernel |
| Escaneamento de configuração do kernel | ✅ | Avaliação completa da superfície de ataque |
| Módulo | Status | Causa Raiz |
|---|---|---|
| SLIDE stack overflow | ❌ | PAC causa expansão do quadro de pilha da cadeia futex para 0xA70, pselect apenas 0x620 |
| fops overwrite | ❌ | Requer SLIDE, bloqueado por PAC |
| type confusion | ❌ | Depende de fops overwrite |
| Pipe physrw | ❌ | Depende de type confusion |
| Root | ❌ | Depende da cadeia acima |
oppo-pgem10-ghostlock/
├── README.md # 本文件
├── 问题描述.md # 详细问题分析
├── docs/
│ ├── architecture.md # 架构设计与调用链
│ └── adaptation-guide.md # PAC 内核适配指南
├── reports/
│ ├── offsets.md # IDA 偏移验证报告
│ ├── kaslr.md # KASLR 分析报告
│ └── summary.md # 最终总结
├── src/
│ ├── kaslr_perf.h # Perf KASLR 可复用模块
│ └── kaslr_perf.c # Perf KASLR 实现
└── analysis/
└── chains/ # 调用链分析脚本
CONFIG_ARM64_PTR_AUTH_KERNEL=y # ← 核心差异:PAC 直接导致帧膨胀
CONFIG_ARM64_BTI_KERNEL=y # BTI 进一步增加开销
CONFIG_SHADOW_CALL_STACK=y # SCS 增加栈帧
CONFIG_VMAP_STACK=y # 栈可重映射
CONFIG_KASAN_HW_TAGS=y # 编译启用
CONFIG_ARM64_VA_BITS=39 # 39位VA(非48位)
Função Pixel 10 (sem PAC) PGEM10 (com PAC)
__arm64_sys_futex 0x90 0x4C0
do_futex 0x70 0x420
futex_wait_requeue_pi 0x1A0 0x1B0
─────────────────────────────────────────────────
futex 链总深 0x300 0xA70 ← 3.5倍
pselect 栈深 0x620 0x620
Possível cobrir? ✅ YES ❌ NO (0xA70 > 0x620)
Análise da cadeia de chamadas confirma: 0 cadeias de chamadas no kernel com profundidade ≥ 0x800 (2048B). Maior quadro único: 0x1F0 (496B).