Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/joinchang/ghostlock-oneplus
Seguridad AndroidEscalada de PrivilegiosFrameworks de ExploitsAnálisis de VulnerabilidadesPruebas de PenetraciónSeguridad MóvilAprendizaje y EducaciónExplotación de Binarios
GitHubjoinchang/ghostlock-oneplus

ghostlock-oneplus

GhostLock (CVE-2026-43499) exploit de kernel para dispositivos Android con bootloader bloqueado

Ver Repositorio
2354625hace 11 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

GhostLock — Jailbreak de Bootloader Bloqueado

Exploit de kernel para dispositivos Android con bootloader bloqueado. Logra root temporal + instalación de KernelSU sin desbloquear el bootloader ni modificar la imagen de arranque. Detección automática en tiempo de ejecución de la versión del kernel con tabla de offsets multi-dispositivo.

GhostLock ejecutándose en OnePlus Ace 6T con KernelSU (LKM, modo Jailbreak)

Vulnerabilidad

CVE-2026-43499 — Futex PI (Priority Inheritance) Use-After-Free

Afecta al kernel de Linux 5.7 ~ 7.1. Corregido en las versiones estables 6.1.175, 6.6.140, 6.12.86. La mayoría de los dispositivos Android permanecen sin parchear a septiembre de 2026.

La llamada al sistema pselect6 copia datos de fd_set en la pila del kernel. Cuando se combina con el mecanismo de espera futex PI, un marco de pila liberado puede ser reclamado como una estructura rt_mutex_waiter. El rebalanceo del rb-tree durante el recorrido de la cadena PI escribe entonces valores controlados en direcciones arbitrarias del kernel.

Dispositivos Soportados

Verificados Funcionando

Offsets Extraídos (pendiente de prueba en dispositivo)

No Factibles

La superposición de pila de pselect requiere que el rt_mutex_waiter liberado aterrice dentro de la región stack_fds controlable por el usuario (words 0–14). Dónde aterriza está determinado por los perfiles PGO/LTO del compilador, no por la versión del kernel. Ver Diseño de la Pila.

Nota sobre factibilidad en 6.1: Los kernels OPLUS 6.1 son consistentemente no factibles debido a que PGO inlinea do_futex. Sin embargo, algunos kernels no-OPLUS 6.1 (vivo) conservan la cadena de llamadas estándar y son factibles (vivo T4, X Fold3 Pro). La factibilidad debe comprobarse por dispositivo.

Flujo del Exploit

Dos rutas de root, seleccionadas automáticamente según las capacidades del dispositivo:

Ruta A: Root UMH (preferida, dispositivos C ashmem)

Requiere off_ashmem_misc_fops != 0 (C ashmem con miscdevice estático en BSS).

root@kitploit:~
Escritura PI (modo=4)  →  redirigir fops de miscdevice a fops falsos
                   →  r/w configfs → physrw de tubería (r/w de kernel preciso de 1 byte)
                   →  SELinux enforcing = 0 (byte único, sin corrupción de policycap)
                   →  UMH: inyectar work_struct en system_unbound_wq
                   →  script de root → carga tardía de ksud → KSU instalado

Disponible en: OnePlus 13, OPPO Pad 4 Pro, dispositivos C ashmem 5.10/6.1. No disponible en Rust ashmem (GKI 6.12) — miscdevice asignado en heap.

Ruta B: Escritura PI Directa (respaldo)

root@kitploit:~
Escritura 1 (modo=1)  →  SELinux enforcing = 0 (escritura de 8 bytes, corrompe bytes adyacentes)
Escritura 2 (modo=2)  →  task->cred = init_cred (uid=0, todas las capacidades)
Shell de root         →  carga tardía de ksud → KSU → corrección de política SELinux

Después de W1+W2, el exploit parchea el campo de configuración del binario de política SELinux (|= 0xC0000000 para ANDROID_NETLINK_ROUTE + GETNEIGH) y lo recarga vía /sys/fs/selinux/load para restaurar la conectividad de red.

Modo Bootstrap (teléfono independiente)

root@kitploit:~
App (seccomp)  →  Escritura 1 → mini-adb TCP → adb shell: exploit completo → root

Arranque Automático

El lanzador de arranque lo proporciona la aplicación separada GhostLock Anchor.

Diseño de la Pila — Factibilidad

Con NFDS=320, core_sys_select asigna un buffer stack_fds de 256 bytes en la pila del kernel:

root@kitploit:~
stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── CONTROLADO POR USUARIO ──►│◄── CERO DEL KERNEL ──►

El exploit coloca campos falsos de waiter (task, lock) en los mapas de bits de entrada de fd_set. Para waiter anidado 6.12 (14 words): word de waiter máxima factible = 3. Para waiter compacto 5.10/6.1 (10 words): word de waiter máxima factible = 7.

La posición del waiter depende de la profundidad de la cadena de llamadas:

kernel_phys_load

Todas las escrituras al kernel usan el alias de mapa lineal. El bootloader elige kernel_phys_load, que varía según el SoC:

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000

Un valor incorrecto falla silenciosamente. Léelo en una unidad con root:

root@kitploit:~
su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... → 0xc7800000

Anulación en tiempo de ejecución: KPHYS=0xc7800000 /data/local/tmp/a/e

PSELECT_SHIFT

root@kitploit:~
/data/local/tmp/a/e                        # Predeterminado (shift=0)
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # OnePlus 13 (6.6)

KIMAGE_TEXT_BASE

Los kernels 5.10 usan 0xffffffc008000000 (VA_BITS=39, diferente del valor predeterminado 6.x 0xffffffc080000000). Esto se maneja automáticamente mediante el campo kimage_text_base en la entrada de offsets del dispositivo.

Compilación

root@kitploit:~
make NDK_ROOT=/ruta/al/android-ndk

O directamente:

root@kitploit:~
NDK=/ruta/al/android-ndk
"$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang" \
  -O2 -Wall -Isrc/core -Isrc/devices -DTARGET_CONFIG_H=\"target.h\" \
  src/core/main.c src/core/util.c src/core/slide.c \
  src/core/fops.c src/core/pipe_physrw.c src/core/root.c \
  src/core/miniadb.c src/core/umh_root.c \
  -o ./ghostlock -fPIE -pie -pthread

Requisitos Previos

ksud (requerido para la instalación de KSU)

GhostLock proporciona root temporal. La instalación de KernelSU requiere ksud, que incluye kernelsu.ko para cada versión de KMI.

MétodoPasos
APK ReSukiSU (recomendado)Instala ReSukiSU o este . Incluye .

Configuración

root@kitploit:~
adb shell mkdir -p /data/local/tmp/a
adb push ./ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e

Ejecutar después de que el arranque se complete y ADB esté listo.

Añadir Nuevos Dispositivos

Solo se necesita boot.img — sin root, sin acceso al dispositivo.

1. Extraer kernel y kallsyms

Consulta la guía de herramientas kallsyms para el flujo de trabajo completo, o:

root@kitploit:~
python tools/extract_target.py --kallsyms kallsyms.txt
python tools/extract_btf.py kernel

2. Determinar la factibilidad

Comprueba si do_futex está inlineado por PGO buscando en el binario del kernel todas las instrucciones de salto dirigidas a futex_wait_requeue_pi. Si __arm64_sys_futex lo llama directamente (omitiendo do_futex), es probable que el dispositivo no sea factible.

3. Crear la entrada del dispositivo

Añade src/devices/<nombre>/offsets.h con los offsets extraídos e inclúyelo en src/devices/offsets.h. Usa la macro de offsets de estructura apropiada:

Para dispositivos con waiter compacto 5.10/6.1, también establece .kimage_text_base=0xffffffc008000000ULL.

Archivos

Licencia

Solo para investigación de seguridad autorizada y fines educativos.

Descargar herramienta
DispositivoSoCKernelRama GKISHIFT
OnePlus Ace 6T (PLR110)SM88456.12.38android16-50
OnePlus 15 (CPH2745/2747/2749)SM88506.12.23android16-50
Xiaomi 17 (pudding)SM88506.12.23 / 6.12.69android16-5 / android16-60
OnePlus 13 (IN2060)SM87506.6.89android15-8-2
OPPO Pad 4 ProSM87506.6.89android15-8-2
DispositivoSoCKernelNotas
OnePlus 15T (PLZ110)SM88456.12.38Mismo kernel que Ace 6T
OPPO Reno10 Pro+ (CPH2521)SM84755.10.236Waiter compacto 5.10, waiter word=0
Vivo X Fold3 Pro (PD2337)SM86506.1.124Waiter compacto 6.1, waiter word=3
Vivo T4SM86506.1.145Waiter compacto 6.1, waiter word=3
DispositivoSoCKernelCausa Raíz
OPPO Find X9 UltraSM87506.12.58PGO elimina do_futex → waiter word=14
OnePlus 12SM86506.1.141PGO inlinea do_futex → waiter word=13/19
OnePlus 13R / Ace 5SM86506.1.xOPLUS 6.1: waiter word=13
realme RMX5070SM66506.1.141OPLUS 6.1: waiter word=13
OPPO Pad 5 (OPD2502)MT68786.1.134OPLUS 6.1: waiter word=13
Motorola Edge 60 FusionMT68786.1.145No-OPLUS 6.1: mismo resultado
iQOO Neo 10 CNSM86506.1.84Marco do_futex 0xD0 → waiter word=-11
OPPO PKW110—5.15.180Marco do_futex 0x140 → waiter word=-29
iQOO Z9 5G—5.15.178Marco do_futex demasiado grande
CPH2763 (OPPO)—6.1.115OPLUS 6.1: PGO inlineado, waiter word=24
PatrónCadena de LlamadasFactible
android16-5 (6.12)sys_futex → do_futex → fwrpi✅ waiter word=2
android15-8 (6.6)sys_futex → do_futex → fwrpi✅ waiter word=2 (SHIFT=-2)
vivo 6.1sys_futex → do_futex → fwrpi✅ waiter word=3
OPLUS 6.1sys_futex → fwrpi (PGO inlineado)❌ waiter word=13+
android16-6 (X9 Ultra)sys_futex → fwrpi (PGO inlineado)❌ waiter word=14
5.10 OPLUSsys_futex → do_futex → fwrpi✅ waiter word=0
SM8650 (vivo T4, X Fold3 Pro)
0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000
fork
libksud.so
Lanzamiento CIDescárgalo desde ReSukiSU CI
KernelDiseño del WaiterMacro
6.12.xAnidado (14 words)STRUCT_OFFSETS_6_12
6.6.xAnidado (14 words)STRUCT_OFFSETS_6_6
6.1.x (vivo)Compacto (10 words)STRUCT_OFFSETS_6_1
5.10.xCompacto (10 words)STRUCT_OFFSETS_5_10
ArchivoDescripción
src/core/main.cEntrada del exploit, W1/W2, ruta UMH, bootstrap, script de root, corrección de política SELinux
src/core/fops.cRuta pselect, escritura PI, etapa CFI, soporte de waiter compacto
src/core/util.cHeap spray, KernelSnitch, drenaje de slab, configuración de payload
src/core/pipe_physrw.cr/w de memoria física del buffer de tubería
src/core/umh_root.cRoot UMH mediante inyección de workqueue
src/core/miniadb.cCliente Mini ADB (TCP + autenticación RSA)
src/core/target.hDiseño de memoria, valores predeterminados de campos de estructura (6.12)
src/core/runtime_struct_offsets.hAnulación de campos de estructura por dispositivo
src/devices/offsets.hTablas de offsets de dispositivos + macros STRUCT_OFFSETS_*
tools/extract_target.pyExtracción de offsets desde kallsyms
tools/extract_btf.pyExtracción de offsets de estructura desde BTF
tools/kallsyms/Flujo de trabajo completo de recuperación de kallsyms