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.
Más
información:
CVE-2013-1763: 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: https://www.exploit-db.com/exploits/44299
Fuente: Hispasec