
GhostLock (CVE-2026-43499) para el Galaxy S25 FE (W.I.P)
CVE-2026-43499 portado a la serie Samsung Galaxy S26 — Android 16 / GKI 6.12. Un solo 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 compilación por build.
La mayoría de los esfuerzos de portabilidad de GhostLock apuntan a un solo dispositivo o a un solo firmware. Este repositorio es un port nuevo que reescribe cada mecanismo para el objetivo S26 y se espera que cubra toda la familia.
Mientras mantenía snothin/CyberMeowfia, descubrí que el canal original de physrw por pipe era inestable (cortaba la red), así que abandoné esa ruta y exploré alternativas. Más tarde descubrí que monovibe había avanzado más 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 vía 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 credenciales de init. La protección EL2 de KDP sobre las páginas de credenciales
nunca se activa.carrera pselect + futex PI
→ una escritura alineada de qword por ronda
→ portador de atributos (dos fds misc falsos)
el fd controlador redirige el puntero de datos
el fd de datos lee/escribe cualquier dirección del kernel
→ oráculo de deslizamiento (tracefs)
→ root UMH (inyección en workqueue)
system_unbound_wq
tormenta de apertura/cierre de ptmx despierta un worker
el kernel ejecuta el daemon con credenciales de init
→ bypass de DEFEX (bind-mount)
→ su_daemon escucha en /data/local/tmp/temp_su.sock
Los parámetros se comparan por línea de kernel (tres líneas: cn, intl, exynos), no
por build individual. Los builds OTA desconocidos recurren a la línea conocida más cercana según el modelo
y el CSC. Los modelos completamente desconocidos se rechazan (cierre ante fallo). La lista
de builds integrada es la autoritativa en exploit/src/params_table.c.
Consulta PORTING.md para los parámetros necesarios al portar a un nuevo
dispositivo o firmware.
Requiere Android NDK (r26+). Simplemente ejecuta:
cd exploit
make preload
# produce build/bin/preload.so (exploit) y build/embed/su_daemon_aarch64_pie (daemon integrado)
Envía preload.so, su_daemon_aarch64_pie y ksud al dispositivo (ejecuta desde una
sesión de shell adb, 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
# Intento único:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
El exploit es probabilístico (una 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.
La protección de reclamo de arranque (/data/local/tmp/ghostlock-boot.log) registra el resultado de
cada ejecución por arranque; una segunda ejecución de 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.
| Modelo | Nombre de código del dispositivo | Builds probados |
|---|
| 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 probado) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |