
Pesquisa de CVE e exploits para ajudar a obter root em dispositivos Pixel
Faça root em um Google Pixel stock com bootloader bloqueado a partir de um adb shell sem privilégios, usando uma
CVE de kernel — sem desbloqueio, sem flash, sem ajuda do fabricante.
Um bug de kernel alcançável a partir do espaço do usuário produz uma primitiva de leitura/escrita de curta duração. Essa primitiva
é gasta carregando tardiamente um módulo KernelSU no kernel
GKI
em execução, após o que o root é entregue ao gerenciador KernelSU que já estiver instalado.
Nenhuma partição é escrita, então um reboot é a desinstalação. Tudo roda a partir do host via
adb através de um único executável, ./pixel-ksu-root.
| CVE | o bug | onde está |
|---|---|---|
| CVE-2026-43499 — GhostLock | uma caminhada PI de futex segue um rt_mutex_waiter que remove_waiter() deixou pendente, lido de um slot de pilha que pselect(2) reocupou | faz root, verificado em hardware; a receita default, então uma execução simples já a utiliza |
| CVE-2026-43049 — FFWheel | hidpp_probe() publica o dispositivo de entrada antes da inicialização de force-feedback e retorna o erro sem hid_hw_stop(), então um struct uhid_device liberado permanece alcançável através de /dev/input/eventN | faz root, verificado em hardware; um use-after-free de um shell sem privilégios até leitura/escrita arbitrária no kernel, depois uma sobrescrita do próprio cred no local |
| CVE-2026-93189 — Joyride | hid_hw_stop() nunca espera a entrada parar, então um probe falho libera o struct hidraw no qual hidraw_report_event() ainda está escrevendo em outro processador | sucessor candidato; o caminho até o free é percorrido em hardware a partir de um shell sem privilégios através de /dev/uhid, e está aberto em builds que fecham ambas as cadeias acima |
| CVE-2026-46242 — BadEpoll | __ep_remove() limpa file->f_ep e continua usando o arquivo, então um __fput() concorrente libera o eventpoll através do qual ele ainda está escrevendo | parcial; as cadeias de leitura e escrita rodam de ponta a ponta, mas a entrega através da fronteira do slab não foi resolvida |
| CVE-2026-56945 — RogueWave | bigo_iommu_fault_handler() percorre uma lista de instâncias global do driver sem lock, sob uma suposição documentada e incorreta sobre seu chamador | alcançável sem privilégios através da API pública AMediaCodec; o próprio fault handler ainda não foi acessado |
| CVE-2026-56914 — DirtyDock | gcip_iommu_mapping_unmap_buffer() suja uma página DMA pinned com o set_page_dirty() sem lock em vez de sua variante com locking, correndo com o teardown da memória de suporte | disparável de ponta a ponta, embora o device node seja restrito por privilégios; duas estratégias de corrida refutadas, timing ainda não vencido |
| CVE-2026-64468 — Frostbind | binder_free_transaction() desreferencia t->to_proc sem manter uma referência | caça; a leitura vulnerável roda, mas a corrida é perdida em hardware real |
| CVE-2026-64469 — Frostwalk | um irmão do Frostbind, na mesma função: a leitura sem lock de binder_free_transaction() corre com binder_thread_release() percorrendo a transaction_stack de uma thread diferente | caça; free e caminhada ambos confirmados alcançáveis, sem dependência de root no mecanismo — alcança um processo de app da mesma forma que o Shizuku; uma tentativa de recuperação sem uma verify-read (flood + pin) ainda não foi bem-sucedida — o alvo real da escrita ainda não foi distinguido |
| CVE-2026-64560 — Zombietick | um timer POSIX de CPU de escopo de processo é liberado enquanto ainda está na fila, porque posix_cpu_timer_del() retorna cedo assim que de_thread() anula ->sighand | caça; o estágio de KASLR funciona, o descritor de ponte nunca valida |
| CVE-2026-49881 — Telecom | O Telecom confia em um nome de componente fornecido pelo chamador e o carrega com CONTEXT_INCLUDE_CODE, então um app isca executa Java arbitrário dentro do system_server | pesquisa; um pivô de domínio no espaço do usuário em vez de um bug de kernel, emparelhado com domainprobe/ |