
Exploit del kernel de Android para CVE-2019-2215, un use-after-free en el controlador Binder, que permite la escalada de privilegios a root mediante corrupción de memoria y parcheo de credenciales en dispositivos ARM64 vulnerables.
CVE-2019-2215 — Android Binder Use-After-Free Privilege Escalation Descripción
Exploit para la vulnerabilidad CVE-2019-2215 — use-after-free en el controlador binder del kernel de Android. Permite elevar privilegios a root en dispositivos vulnerables. Vulnerabilidad
CVE-2019-2215 — use-after-free en binder_thread al trabajar con epoll. El error ocurre debido a un manejo incorrecto de la cola de espera en binder_poll(), lo que lleva a la posibilidad de sobrescribir la memoria del kernel.
Principio de funcionamiento
Fuga de puntero (leakTaskStruct)
Una condición de carrera entre epoll y binder provoca la lectura del puntero a task_struct del proceso actual a través de writev/pipe.
Sobrescritura de addr_limit (clobberAddrLimit)
Se usa la misma condición de carrera para escribir 0xFFFFFFFFFFFFFFFE en el campo addr_limit de la estructura task_struct, lo que abre acceso a toda la memoria del kernel.
Parche de cred (patchCred)
A través del canal pipe (kernel_fd) se lee y sobrescribe la estructura cred del proceso actual:
UID/GID = 0 (root)
Capacidades completas (CAP_FULL_SET)
Desactivación de SELinux (disableSELinuxEnforcing)
A través de nsproxy se calcula la dirección base del kernel, y la bandera selinux_enforcing se pone a cero.
Ejecución de shell con privilegios root: system("/bin/sh")
Requisitos
Dispositivo con una versión vulnerable de Android (anterior al parche de octubre de 2019)
Arquitectura ARM64
Presencia de /dev/binder
Al compilar, se deben especificar los símbolos del kernel:
init_nsproxy — para calcular la base del kernel
selinux_enforcing — para desactivar SELinux
Los símbolos se pueden obtener de /proc/kallsyms en el sistema objetivo.