La vulnerabilidad con código CVE-2013-1763 afecta a un amplio rango de distribuciones, entre ellas Fedora, Ubuntu y Arch Linux. Esta vulnerabilidad, cuenta además con el código para explotarla, que permite obtener privilegios de root. En esta entrada analizaremos cómo se obtienen dichos privilegios.
Esta vulnerabilidad afecta a las versiones del kernel 3.0-37.10 y se encuentra en ‘net/core/sock_diag.c‘ donde la función ‘__sock_diag_rcv_msg’ no hace hace una comprobación de `bounds check` del array ‘sock_diag_handles’ provocando una ‘out-of-bounds exception’ y permitiendo a usuarios sin privilegios de root obtenerlo.En los sistemas Linux de 32 bits, cada proceso virtualizará 4GB de espacio de memoria, siendo 3GB de estos el espacio de usuario y 1GB el espacio del kernel. En este caso el rango de user-space es 00000000 a 0xBFFFFFFF y el espacio de kernel 0xC0000000 a 0xFFFFFFFF. El espacio del kernel es compartido por todos los procesos sin embargo, sólo pueden acceder los procesos que se estén ejecutando en kernel-mode. Los procesos a nivel de usuario pueden acceder a kernel-mode a través de `syscalls`. Si un proceso se ejecuta en kernel-mode, las direcciones generadas pertenecen al espacio del kernel.
Las funciones ‘commit_creds’ y ‘prepare_kernel_cred’ son funciones del kernel y para poder ejecutarlas tendríamos que pasar a kernel-mode; por tanto si la función ‘__sock_diag_rcv_msg’ se ejecuta en kernel-mode, podemos aprovecharla para ganar privilegios de root.
Se aplica un mmap al rango de memoria 0x10000-0x120000, incluyendo una serie de NOPs hasta poder colocar correctamente la payload que salta al código que pertenece a kernel-mode. En Ubuntu, no se puede obtener el valor de la variable ‘rehash_time’ de dicho rango de memoria, por lo que sólo es válido el siguiente método para obtenerla:
`sudo cat /boot/System.map-3.5.0-17-generic`
Tras conseguir toda esta información, el usuario puede obtener privilegios de root. Como contra, para poder ejecutar este exploit más de una vez, es necesario reiniciar el sistema operativo.
fdiaz@hispasec.com
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-1763
Linux Kernel < 3.5.0-23 (Ubuntu 12.04.2 x64) – ‘SOCK_DIAG’ SMEP Bypass Local Privilege Escalation:
Fuente noticia: http://unaaldia.hispasec.com/ Fuente foto: pixabay.com