
CVE-2019-2215 — Android Binder Use-After-Free Privilege Escalation Descrizione
Exploit per la vulnerabilità CVE-2019-2215 — use-after-free nel driver binder del kernel Android. Consente di elevare i privilegi a root sui dispositivi vulnerabili. Vulnerabilità
CVE-2019-2215 — use-after-free in binder_thread durante l'uso di epoll. L'errore deriva da una gestione non corretta della coda di attesa in binder_poll(), che consente la sovrascrittura della memoria del kernel.
Principio di funzionamento
Fuga del puntatore (leakTaskStruct)
La race condition tra epoll e binder porta alla lettura del puntatore alla task_struct del processo corrente tramite writev/pipe.
Sovrascrittura di addr_limit (clobberAddrLimit)
Viene utilizzata la stessa race condition per scrivere 0xFFFFFFFFFFFFFFFE nel campo addr_limit della struttura task_struct, consentendo l'accesso a tutta la memoria del kernel.
Patch delle credenziali (patchCred)
Tramite il canale pipe (kernel_fd) viene letta e sovrascritta la struttura cred del processo corrente:
UID/GID = 0 (root)
Capabilities complete (CAP_FULL_SET)
Disattivazione di SELinux (disableSELinuxEnforcing)
Tramite nsproxy viene calcolato l'indirizzo di base del kernel e il flag selinux_enforcing viene azzerato.
Avvio di una shell con privilegi root: system("/bin/sh")
Requisiti
Dispositivo con versione di Android vulnerabile (prima della patch di ottobre 2019)
Architettura ARM64
Presenza di /dev/binder
Durante la compilazione è necessario specificare i simboli del kernel:
init_nsproxy — per calcolare la base del kernel
selinux_enforcing — per disattivare SELinux
I simboli possono essere ottenuti da /proc/kallsyms sul sistema di destinazione.