
Exploit fork do GhostLock (CVE-2026-43499) para RootMyVivo Neo — iQOO Neo 11 (PD2520, SM8750, 6.6.89). Apenas para pesquisa autorizada em dispositivos próprios.
Fork de boxiaolanya2008/CVE-2026-43499-Neo11Plus, reelaborado para o RootMyVivo Neo: removido tudo o que não é necessário para o nosso cenário, mantido o kernel do exploit verificado sem alterações de timing.
| Componente | Motivo |
|---|---|
| Troca de wallpaper + kill do system_server | principal fonte de soft reboot "espontâneo" e troca de wallpaper após o root |
| daemon io (porta 39555) | era necessário apenas para o kernelapp de depuração; o aplicativo funciona via su |
| overlay tmpfs em /apex/com.android.virt/bin | podia travar o zygote/system_server durante soft reboot (tela preta) |
| Instalação do su no mount-namespace do adbd | o aplicativo chama /data/local/tmp/su pelo caminho completo |
| Serviço de boot 10-neo11-su.sh | a fixação é feita pelo aplicativo: persist.adb.tcp.port + adb_keys + ksud |
| Tabelas de offsets de outros dispositivos | apenas PD2520-BP2A.250605.031.A3 |
| kernelapp (app/) | substituído pela funcionalidade do aplicativo |
panic_on_oops=0, panic_on_warn=0 (proteção contra panics),
kptr_restrict/dmesg_restrict, envenenamento AVC (permissive sem quebrar policycap)/system/bin/su, quando este apareceO exploit coloca /data/local/tmp/su (0755, root:root, contexto system_file)
e inicia o daemon com socket /data/local/tmp/temp_su.sock.
O aplicativo chama o su pelo caminho completo — /apex não é tocado de forma alguma.
cd exploit
PATH=/data/data/com.termux/files/usr/bin:$PATH \
make HOST_CLANG=/data/data/com.termux/files/usr/bin/clang \
NDK_ROOT=/root/android-sdk/ndk/26.1.10909125
build/PD2520-BP2A.250605.031.A3/bin/preload.so (~140 KB)
e build/embed/su_daemon_aarch64_pie (su, ~11 KB)6.6.89-android15-8-g1f71897ac249-abogki467805059-4k (offsets de
kallsyms+BTF deste boot.img; troca de kernel = regeneração do target.h)cd /data/local/tmp/rmv && LD_PRELOAD=$PWD/preload.so /system/bin/trueRMV_ATTEMPTS=N — número de tentativas completas (padrão 3)RMV_RETRY_DELAY=N — pausa entre tentativas em segundos (padrão 8)NEO11_* — controles do upstream (delay/nice/attempts) preservados| Mecanismo | O que faz | Do que protege |
|---|
| safety_quiesce | antes da rota PI espera loadavg < 4 (até 10 s) | waiter em frame alheio → panic sob alta carga do sistema |
| cred-guard | antes de escrever cred verifica que os ponteiros são endereços canônicos de kernel | escrita de ponteiro lixo → corrupção instantânea do task_struct → panic |
| ciclo de retry | até 3 execuções completas (cada uma em fork novo) com pausa de 8 s | loteria de timing: a segunda tentativa frequentemente passa, o upstream simplesmente desistia |
| spin adaptativo | threads consumer: 200 iterações de yield → nanosleep(0.2 ms) | 100% de CPU durante todo o exploit |