Vulnerabilidad permite acceder como root en varias distribuciones

Llevando el código CVE-2013-1763 se cataloga una vulnerabilidad que permite acceso root y varias son las distribuciones afectadas como Ubuntu, Fedora y Arch.

Esta vulnerabilidad radica en la función __sock_diag_rcv_msg definida en net/core/sock_diag.c de Linux 3.0-37.10. Esta función no hace control de límites del array sock_diag_handles, lo que podría generar una excepción al intentar escribir fuera de los límites y provocar un escalimiento de privilegios para convertirse en root.

En entornos de 32 bits, los procesos reservan un espacio de 4 GB de memoria virtual (1 GB de espacio de kernel y 3 GB en espacio de usuario), dando un espacio de direccionamiento de usuario entre 00000000 y 0xBFFFFFFF, y un espacio de direccionamiento de kernel de 0xC0000000 a 0xFFFFFFFF al que pueden acceder los procesos ejecutando en modo kernel. Recordemos también que pueden acceder a modo kernel los procesos de usuario solo a través de llamadas al sistema (syscalls). Cuando un proceso se ejecuta en modo kernel, las direcciones generadas van a estar dentro del espacio del kernel.

Existes dos funciones de modo kernel, prepare_kernel_cred y commit_creds, que, por su naturaleza, requerirán conmutar a modo núcleo, por lo que si en este modo se ejecuta la función __sock_diag_rcv_msg será posible aprovecharla para ganar privilegios de root

Básicamente, el procesdimiento para explotar esta vulnerabilidad es emplear la función mmap sobre el rango de direccionamiento 0x10000-0x120000 colocando varios NOPs de manera tal de posicionar correctamente el payload que lleva al código que pertenece a modo kernel.

En Ubuntu no se puede conseguir para la variable rehash_time el valor correspondiente a dicho rango de direccionamiento, por lo que el único método para conseguirlo es el siguiente:

sudo cat /boot/System.map-3.5.0-17-generic

Con la información mencionada, el usuario puede convertirse en root. Una desventaja de este exploit es que para ejecutarlo más de una vez será necesario reiniciar el sistema operativo.