
Exploit de prueba de concepto para CVE-2019-2215, una vulnerabilidad de uso después de liberación en el controlador binder de Android que permite la escalada de privilegios local en dispositivos vulnerables.
El siguiente problema existe en la rama android-msm-wahoo-4.4-pie de https://android.googlesource.com/kernel/msm (y posiblemente en otras):
Hay un use-after-free del miembro wait en la estructura binder_thread del controlador binder en /drivers/android/binder.c.
Como se describe en la confirmación ascendente: “binder_poll() pasa thread->wait waitqueue que puede dormir para trabajar. Cuando un hilo que usa epoll sale explícitamente usando BINDER_THREAD_EXIT, la waitqueue se libera, pero nunca se elimina de la estructura de datos epoll correspondiente. Cuando el proceso posteriormente sale, el código de limpieza de epoll intenta acceder a la waitlist, lo que resulta en un use-after-free.”
La siguiente prueba de concepto mostrará el fallo de UAF en una compilación del kernel con KASAN (del informe de error inicial ascendente en https://lore.kernel.org/lkml/[email protected]/): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
Este problema fue corregido en diciembre de 2017 en el kernel LTS 4.14 [1], el kernel AOSP android 3.18 [2], el kernel AOSP android 4.4 [3] y el kernel AOSP android 4.9 [4], pero el Pixel 2 con el boletín de seguridad más reciente sigue siendo vulnerable según la revisión del código fuente.
Otros dispositivos que parecen ser vulnerables según la revisión del código fuente son (refiriéndose a las versiones 8.x a menos que se indique lo contrario):
Tenemos evidencia de que este error se está utilizando activamente. Por lo tanto, este error está sujeto a un plazo de divulgación de 7 días. Después de que transcurran 7 días o se haya puesto a disposición un parche de manera general (lo que ocurra primero), el informe del error se hará visible al público.
Confirmado que esta prueba de concepto funciona en Pixel 2 con la compilación walleye_kasan-userdebug 10 QP1A.191105.0035899767, causando un fallo de KASAN. Se adjuntan el código C de prueba de concepto y new.out. Se adjunta la salida de la consola de KASAN.
Recibí información técnica de TAG y partes externas sobre un exploit de Android que se atribuye al grupo NSO. Estos detalles incluían hechos sobre el error y la metodología del exploit, incluyendo pero no limitándose a:
Usando estos detalles, he determinado que el error que se está utilizando es casi con certeza el de este informe, ya que descarté otros candidatos potenciales comparando parches. Se redactará una explicación más detallada de este error y la metodología para identificarlo en una próxima publicación de blog cuando encuentre tiempo.
Actualmente no tenemos una muestra del exploit. Sin muestras, no hemos podido confirmar ni la línea de tiempo ni la carga útil.
El error es una vulnerabilidad de escalada de privilegios local que permite un compromiso total de un dispositivo vulnerable. Si el exploit se entrega a través de la web, solo necesita combinarse con un exploit de renderizador, ya que esta vulnerabilidad es accesible a través del sandbox.
He adjuntado una prueba de concepto de exploit local para demostrar cómo se puede usar este error para obtener lectura/escritura arbitraria del kernel cuando se ejecuta localmente. Solo requiere la ejecución de código de aplicación no confiable para explotar CVE-2019-2215. También he adjuntado una captura de pantalla (success.png) del POC ejecutándose en un Pixel 2 con Android 10 y nivel de parche de seguridad de septiembre de 2019 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys).
Declaración del proveedor de Android:
"Este problema está clasificado como de gravedad Alta en Android y por sí mismo requiere la instalación de una aplicación maliciosa para una posible explotación. Cualquier otro vector, como a través de un navegador web, requiere encadenarse con un exploit adicional. Hemos notificado a los socios de Android y el parche está disponible en el Kernel Común de Android. Los dispositivos Pixel 3 y 3a no son vulnerables, mientras que los dispositivos Pixel 1 y 2 recibirán actualizaciones para este problema como parte de la actualización de octubre."