
Exploit de kernel para CVE-2026-43499 en Samsung Galaxy A17 que logra root mediante bypass de KDP, recuperación de KASLR y ejecución de workqueue forjada con shell persistente.
Cadena de exploit completa de usuario a root para CVE-2026-43499 ("GhostLock") en el Samsung Galaxy A17 SM-A175F, con Android 16 / GKI 6.12.
La cadena comienza con las primitivas públicas de GhostLock y termina con un usermode helper ejecutándose como:
uid=0(root) gid=0(root) groups=0(root)
context=u:r:kernel:s0
También inicia un shell root persistente por arranque mediante g4d / g4sh y sale sin pánico de kernel.
📖 Informe técnico completo:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
Nota de investigación
No descubrimos CVE-2026-43499. El crédito por la vulnerabilidad original y la investigación de IonStack corresponde a Nebula Security.
Este repositorio documenta nuestro port independiente para el Samsung Galaxy A17, los cambios necesarios para las protecciones del kernel de Samsung y una nueva etapa final de explotación.
Solo para investigación de seguridad autorizada y fines educativos.
La investigación original de ghostlock proporciona las primitivas de entrada:
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
Sin embargo, en el Galaxy A17, la estrategia final estándar de parcheo de credenciales no funciona.
KDP protege los datos del kernel relacionados con las credenciales en EL2.
En esta compilación, los intentos de modificar las credenciales de las tareas se descartaron silenciosamente incluso cuando las direcciones objetivo eran correctas.
Así que, en lugar de escribir credenciales de root, este port hace que el kernel ejecute con las credenciales privilegiadas existentes.
La etapa final:
constrained kernel write
↓
physical read/write channel
↓
KASLR slide recovery
↓
discover system_wq / cpu_pwq
↓
forge work_struct
↓
call_usermodehelper_exec_work
↓
/system/bin/sh
↓
uid=0(root), u:r:kernel:s0
Se coloca un elemento de trabajo forjado en un pool vinculado de system_wq y se dispara con una tormenta de asignación/liberación de ptmx.
El usermode helper resultante se ejecuta con las credenciales de init.
No se requiere sobrescribir las credenciales de la tarea.
userspace shell (uid 2000)
│
▼
pselect / PI-futex primitive
│
▼
constrained aligned kernel pointer write
│
▼
forged pipe_buffer channel
│
▼
arbitrary physical read/write
│
├── recover KASLR slide
│
├── locate system_wq / cpu_pwq
│
└── prepare forged work_struct
│
▼
queue usermode-helper work
│
▼
ptmx storm wakes worker
│
▼
/system/bin/sh runs with init creds
│
▼
uid=0(root)
│
▼
g4d → @ghostlockd → g4sh
En comparación con el port público de OnePlus, la mayoría de las etapas posteriores a la primitiva de escritura inicial fueron reestructuradas.
La etapa final de parcheo de credenciales fue reemplazada por un elemento de workqueue forjado dirigido a la ruta de ejecución del usermode helper.
Esto evita por completo escribir en las estructuras cred protegidas.
El enfoque anterior de anclaje mediante perf-event no era fiable en este dispositivo.
En su lugar, el exploit utiliza tres punteros desplazados (slid) de la entrada ctl_table de boot_id:
procname
data
proc_handler
Los tres se validan de forma cruzada antes de aceptar el slide.
cpu_pwq se descubre recorriendo:
system_wq → pwqs
en lugar de depender de un offset fijo específico del dispositivo.
El canal original deja cambios colaterales en el estado de struct page que pueden provocar PANIC_ON_OOPS durante el teardown.
La cadena actual evita el fallo del teardown y se ha demostrado que sale limpiamente después del root.
El usermode helper inicia:
g4d
que escucha en el socket Unix abstracto:
@ghostlockd
g4sh se conecta a él y proporciona un shell root interactivo o la ejecución de un único comando.
/data/local/tmp/a/g4sh
/data/local/tmp/a/g4sh -c "id"
Este objetivo combina varias protecciones que rompen las técnicas comunes de explotación del kernel de Android:
Esto obligó a adoptar una estrategia de exploit diferente a la habitual:
arbitrary RW → patch cred → disable SELinux
En su lugar:
arbitrary RW → recover runtime state → forge kernel work → execute usermode helper
Requiere un Android NDK reciente.
make
Produce:
ghostlock # exploit
g4d # static root-shell daemon
g4sh # root-shell client
Sube los binarios:
adb push ghostlock /data/local/tmp/a/g4
adb push g4d /data/local/tmp/a/g4d
adb push g4sh /data/local/tmp/a/g4sh
adb shell 'chmod 755 /data/local/tmp/a/g4 /data/local/tmp/a/g4d /data/local/tmp/a/g4sh'
Ejecuta el bucle de exploit con gestión de reinicios:
./scripts/rr_loop4.sh
Después de ROOTED:
adb shell /data/local/tmp/a/g4sh
O ejecuta un único comando:
adb shell '/data/local/tmp/a/g4sh -c "id"'
Resultado esperado:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
La primitiva es probabilística y depende en gran medida de las condiciones de arranque.
La explotación exitosa puede requerir intentos repetidos. El script incluido rr_loop4.sh gestiona automáticamente los reintentos y los ciclos de reinicio.
Es un exploit de investigación, no una herramienta de root instantánea de un solo uso.
qemu-e2e/ contiene un harness de validación de extremo a extremo que utiliza el kernel de Samsung extraído.
El harness se utilizó para probar:
g4d / g4shLa imagen del kernel de Samsung en sí no está incluida.
Consulta:
qemu-e2e/
para las instrucciones de configuración.
Makefile
src/ exploit source and device profiles
src/daemon/ g4d root daemon + g4sh client
docs/OFFSETS.md validated device offsets
docs/PORTING.md porting notes
examples/ proof-of-root artifacts
scripts/rr_loop4.sh reboot-aware exploit loop
qemu-e2e/ end-to-end QEMU validation
NebuSec:
https://nebusec.ai/research/ionstack-part-3/
https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack
https://github.com/JoinChang/ghostlock-oneplus
Un análisis más profundo del port para Samsung Galaxy A17, las limitaciones de KDP, la recuperación de KASLR, la etapa final basada en workqueue y la implementación del shell root:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
Los artefactos de un dispositivo real están disponibles en:
examples/
incluidos los registros del exploit y la verificación del contexto root.
Ejemplo:
uid=0(root)
gid=0(root)
groups=0(root)
context=u:r:kernel:s0
Esta prueba de concepto se proporciona únicamente con fines educativos y de investigación de seguridad autorizada.
Úsala únicamente en dispositivos y entornos que poseas o en los que tengas permiso explícito para realizar pruebas.
| CVE | CVE-2026-43499 — "ghostlock" |
| Dispositivo | Samsung Galaxy A17 (SM-A175F, mt6789) |
| GPU | Mali-G57 |
| Kernel | 6.12.23-android16-5-abA175FXXS3BZA5-4k |
| Resultado | uid=0(root) / u:r:kernel:s0 |
| Shell root | daemon g4d + cliente g4sh |
| Persistencia | Por arranque |
| Salida del exploit | Limpia, sin pánico de kernel |
| Mitigaciones encontradas | Samsung KDP, DEFEX, SELinux, PANIC_ON_OOPS, arm64 KASLR |