
CVE-2026-43499 exploit de root GhostLock para Chromecast com Google TV (sabrina)
Exploit de root para Chromecast com Google TV (sabrina) via CVE-2026-43499 -- um use-after-free no subsistema futex PI (herança de prioridade) do kernel Linux.
Obtém root em um dispositivo com bootloader bloqueado executando Android 14 com kernel 5.15.170 (PGO+BOLT+LTO, clang 17).
GhostLock explora um bug em remove_waiter() chamado a partir do caminho de rollback -EDEADLK em rt_mutex_start_proxy_lock(). A função limpa current->pi_blocked_on (o do requeuer, já NULL) em vez do da tarefa waiter. O pi_blocked_on do waiter nunca é limpo, deixando um ponteiro pendente para um rt_mutex_waiter liberado na pilha do kernel.
Um sched_setattr subsequente dispara rt_mutex_adjust_pi -> rt_mutex_adjust_prio_chain, que segue o ponteiro pendente e percorre uma cadeia PI sobre dados controlados pelo atacante em uma página de heap recuperada -- fornecendo uma primitiva de escrita arbitrária via rb_erase.
ucounts = NULL -- cap_capable corresponde na primeira iteração e inc_rlimit_ucounts termina após um loop, eliminando a necessidade de vazar &init_user_nsPERF_SAMPLE_TID garantem que apenas os snapshots de registradores da thread chamadora sejam contados, evitando que serviços de sistema ativos dominem a votação de modo5.15.170-android14-11-gf4a1f03072af (aarch64, PGO+BOLT+LTO, clang 17.0.2)CONFIG_FUTEX_PI=y, CONFIG_IO_URING=y, perf_event_paranoid=-1, SELinux enforcing, panic_on_oops=1, sem namespaces de usuárioexport ANDROID_NDK_HOME=/path/to/android-ndk
make -j$(nproc)
Requer o Android NDK (testado com r27). Produz um binário aarch64 estaticamente linkado.
adb push ghostlock /data/local/tmp/
adb shell "cd /data/local/tmp && ./ghostlock --cred"
O exploit leva ~20 segundos (heap spray + bruteforce do KernelSnitch). Em caso de sucesso, o processo executa /system/bin/sh com credenciais uid=0.
Este exploit foi portado e desenvolvido por Claude Opus 4.6 (Anthropic) com GLM-5.3 (Z.ai) como consultor de exploração de kernel.
kernel/futex/, kernel/locking/rtmutex.c, lib/rbtree.cEste exploit é publicado para pesquisa de segurança e fins educacionais. Ele tem como alvo um dispositivo de propriedade do pesquisador. Não use isto em dispositivos que você não possui ou sem autorização.
MIT
| Estágio | Técnica |
|---|
| Vazamento de KASLR | perf_event_open com PERF_SAMPLE_IP (controlado por TID) |
| Vazamento de task struct | perf_event_open com PERF_SAMPLE_REGS_INTR (controlado por TID, modo de endereços do mapa linear) |
| Vazamento de mm_struct | KernelSnitch -- canal lateral de temporização por colisão de hash de futex |
| Heap spray | Coreografia de descarte SLUB (memfd-close, overflow parcial de CPU) + recuperação de página de ordem 2 com io_uring_setup(256) |
| Sobreposição de pilha | AF_UNIX SOCK_SEQPACKET sendmsg -- move_addr_to_kernel copia sockaddr de 128 bytes para a pilha do kernel, sobrepondo os campos task/lock/prio do waiter pendente |
| Gatilho de caminhada | sched_setattr com escada nice monotônica (7 -> 14 -> 19) dispara a caminhada da cadeia PI |
| Primitiva de escrita | rb_erase Caso 1a escreve child (fake_cred) em parent->rb_right = task->cred |
| Troca de credenciais | task->cred = fake_cred (uid=0, todas as caps, user_namespace falso autocontido na página de spray) |
| Shell root | execve("/system/bin/sh") -- commit_creds no caminho de exec copia fake_cred para uma credencial de slab limpa |