
Cadeia de exploit de prova de conceito para CVE-2026-43499 visando dispositivos Android OPPO MT6835, com payload de pré-carregamento, sistema de construção e notas de análise para pesquisa defensiva.
GhostLock: Vulnerabilidade de Use-After-Free em futex PI do kernel Linux, CVE-2026-43499. Atacantes exploram loops de dependência de PI-futex para acionar uma condição de corrida, alcançando escalonamento local de privilégios em kernels com
CONFIG_FUTEX_PI=y.Alvo: OPPO PLS120 (OP5E1C) — Android 17, kernel
5.15.180-android13-8-o-g7b9cfca06464Ambiente de Análise: Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0, API 35)
Repositório Fonte: NebuSec/CyberMeowfia — IonStack/CVE-2026-43499
Este projeto pesquisa a viabilidade de explorar o GhostLock (CVE-2026-43499) para obter privilégios de root em um dispositivo OPPO PLS120 (OP5E1C). Por meio da verificação sistemática de todos os caminhos conhecidos de vazamento de KASLR, confirma-se que a combinação de reforços de segurança do dispositivo constitui uma cadeia de proteção impossível de contornar.
| Fase | Status | Descrição |
|---|---|---|
| Fase 1: Análise do boot.img e extração de símbolos | ✅ Concluído | Extrair boot.img do pacote OTA → reconstrução da tabela de símbolos com vmlinux-to-elf (159.668 símbolos) |
| Fase 2: Compilação do preload.so | ✅ Concluído | Compilação cruzada com Android NDK r29, mecanismo de log em tempo real forçado para gravação em disco |
| Fase 3: Diagnóstico de falhas e correções iterativas | 🔄 Em andamento | Já corrigidos MM_STRUCT_SZ, suporte a MTE, lógica de salto de SLIDE |
O reforço de segurança do OPPO PLS120 bloqueia completamente a cadeia de exploit:
| Item de reforço | Impacto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Impede a colisão de slab do KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | As tags de endereço aumentam a complexidade do bruteforce |
CONFIG_CFI_CLANG=y | Integridade do fluxo de controle |
| Política de domínio shell do SELinux | Bloqueia perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloqueia o caminho PR_SET_MM_MAP |
| Backport da correção de wchan | Impede que /proc/<pid>/stat vaze VA do kernel |
| Solução | Status | Motivo |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (bloqueio do domínio shell do SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (campo 35 de /proc/<pid>/stat) | ❌ | Kernel já aplicou a correção v5.16 (retorna 1 em vez de VA do kernel) |
| Canal lateral SLIDE (sobrescrita de boot_id) | ❌ | Módulo nfulnl não pode ser carregado |
| Recuperação de pilha PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (timing de hash de futex) | ⚠️ Sucesso ocasional | Ruído de temporização big.LITTLE afeta a estabilidade |
SLIDE_MAX_ATTEMPTS=1!route_signal, permitindo 24 novas tentativasEste projeto pesquisa a viabilidade de explorar o GhostLock (CVE-2026-43499) para escalonamento de privilégios de root em um dispositivo OPPO PLS120 (OP5E1C). Após testar sistematicamente todos os caminhos conhecidos de vazamento de KASLR, a configuração de reforço de segurança do dispositivo forma uma cadeia de defesa impossível de contornar contra este exploit.
| Fase | Status | Descrição |
|---|---|---|
| Fase 1: Análise do boot.img | ✅ Concluída | boot.img extraído da OTA → reconstrução de símbolos vmlinux-to-elf (159.668 símbolos) |
| Fase 2: Build do preload.so | ✅ Concluída | Compilação cruzada com Android NDK r29, logging em disco em tempo real forçado |
| Fase 3: Diagnóstico e Iteração | 🔄 Em Andamento | Corrigidos MM_STRUCT_SZ, suporte a MTE, lógica de bypass do SLIDE |
O OPPO PLS120 bloqueia a cadeia de exploit em múltiplas camadas:
| Recurso de Hardening | Impacto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Bloqueia a colisão de slab do KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | As tags de endereço aumentam a complexidade do bruteforce |
CONFIG_CFI_CLANG=y | Control Flow Integrity |
| Política de domínio shell do SELinux | Bloqueia perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloqueia o caminho PR_SET_MM_MAP |
| Backport da correção de wchan | Bloqueia o vazamento de VA do kernel via /proc/<pid>/stat |
| Método | Status | Motivo |
|---|---|---|
| callchain do perf_event_open | ❌ | EACCES (domínio shell do SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (campo 35 de /proc/<pid>/stat) | ❌ | O kernel possui o backport da correção da v5.16 (retorna 1 em vez do VA do kernel) |
| Canal lateral SLIDE (sobrescrita de boot_id) | ❌ | Módulo nfulnl não carregável |
| Recuperação de pilha PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (temporização de hash futex) | ⚠️ Intermitente | O ruído de temporização big.LITTLE afeta a estabilidade |
SLIDE_MAX_ATTEMPTS=1!route_signal, permitindo 24 novas tentativas/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