
Android kernel exploit para CVE-2019-2215, um use-after-free no driver Binder, possibilitando escalonamento de privilégio para root via corrupção de memória e correção de credenciais em dispositivos ARM64 vulneráveis.
CVE-2019-2215 — Android Binder Use-After-Free Privilege Escalation Descrição
Exploit para a vulnerabilidade CVE-2019-2215 — use-after-free no driver binder do kernel Android. Permite elevar privilégios para root em dispositivos vulneráveis. Vulnerabilidade
CVE-2019-2215 — use-after-free em binder_thread ao trabalhar com epoll. O erro ocorre devido ao tratamento incorreto da fila de espera em binder_poll(), o que leva à possibilidade de reescrita da memória do kernel.
Princípio de funcionamento
Vazamento de ponteiro (leakTaskStruct)
A corrida entre epoll e binder leva à leitura do ponteiro para task_struct do processo atual através de writev/pipe.
Sobrescrita de addr_limit (clobberAddrLimit)
A mesma corrida é usada para escrever 0xFFFFFFFFFFFFFFFE no campo addr_limit da estrutura task_struct, abrindo acesso a toda a memória do kernel.
Patch de cred (patchCred)
Através do canal pipe (kernel_fd), a estrutura cred do processo atual é lida e sobrescrita:
UID/GID = 0 (root)
Capabilities completas (CAP_FULL_SET)
Desativação do SELinux (disableSELinuxEnforcing)
Através de nsproxy, calcula-se o endereço base do kernel e o flag selinux_enforcing é zerado.
Execução do shell com privilégios root: system("/bin/sh")
Requisitos
Dispositivo com versão vulnerável do Android (anterior ao patch de outubro de 2019)
Arquitetura ARM64
Presença de /dev/binder
Na compilação, é necessário especificar os símbolos do kernel:
init_nsproxy — para calcular a base do kernel
selinux_enforcing — para desativar o SELinux
Os símbolos podem ser obtidos de /proc/kallsyms no sistema de destino.