
GhostLock (CVE-2026-43499) fork de exploit para RootMyVivo Neo — iQOO Neo 11 (PD2520, SM8750, 6.6.89). Solo para investigación autorizada en dispositivos propios.
Fork de boxiaolanya2008/CVE-2026-43499-Neo11Plus, reelaborado para RootMyVivo Neo: se eliminó todo lo que no necesita nuestro escenario, se conservó el núcleo verificado del exploit sin cambios en los timings.
| Componente | Motivo |
|---|---|
| Cambio de fondo de pantalla + matar system_server | principal fuente de soft reboot "espontáneos" y cambios de fondo tras el root |
| io-daemon (puerto 39555) | solo lo necesitaba el kernelapp de depuración; la aplicación funciona vía su |
| overlay tmpfs en /apex/com.android.virt/bin | podía colgar zygote/system_server durante el soft reboot (pantalla negra) |
| Instalación de su en el mount-namespace de adbd | la aplicación invoca /data/local/tmp/su por ruta completa |
| Servicio de arranque 10-neo11-su.sh | la persistencia la hace la aplicación: persist.adb.tcp.port + adb_keys + ksud |
| Tablas de offsets de otros dispositivos | solo PD2520-BP2A.250605.031.A3 |
| kernelapp (app/) | reemplazado por la funcionalidad de la aplicación |
panic_on_oops=0, panic_on_warn=0 (protección contra pánicos),
kptr_restrict/dmesg_restrict, envenenamiento AVC (permissive sin romper policycap)/system/bin/su, cuando este apareceEl exploit coloca /data/local/tmp/su (0755, root:root, system_file context)
y arranca el daemon con socket /data/local/tmp/temp_su.sock.
La aplicación invoca su por ruta completa — /apex no se toca en absoluto.
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)
y build/embed/su_daemon_aarch64_pie (su, ~11 KB)6.6.89-android15-8-g1f71897ac249-abogki467805059-4k (offsets de
kallsyms+BTF de este boot.img; cambiar el kernel = regenerar target.h)cd /data/local/tmp/rmv && LD_PRELOAD=$PWD/preload.so /system/bin/trueRMV_ATTEMPTS=N — número de intentos completos (por defecto 3)RMV_RETRY_DELAY=N — pausa entre intentos en segundos (por defecto 8)NEO11_* — controles de upstream (delay/nice/attempts) conservados| Mecanismo | Qué hace | De qué protege |
|---|
| safety_quiesce | antes de la ruta PI espera loadavg < 4 (hasta 10 s) | waiter en un frame ajeno → panic con alta carga del sistema |
| cred-guard | antes de escribir cred verifica que los punteros sean direcciones kernel canónicas | escritura de un puntero basura → corrupción instantánea de task_struct → panic |
| ciclo de reintentos | hasta 3 ejecuciones completas (cada una en un fork nuevo) con pausa de 8 s | lotería de timings: el segundo intento suele pasar, upstream simplemente se rendía |
| spin adaptativo | hilos consumer: 200 iteraciones yield → nanosleep(0.2 ms) | 100% CPU durante todo el exploit |