Publicados boletines de dos exploits y una prueba de concepto para una vulnerabilidad en el kernel Linux que podría permitir a un atacante local elevar privilegios a Root.

La vulnerabilidad afecta a los kernel Linux posteriores a la versión 3.4. El error fue introducido en la función ‘compat_sys_recvmmsg’ en el archivo ‘/net/compat.c’ al agregar código para manejar estructuras de tiempo de 64 bits. 

 
Básicamente, el fallo consiste en una ausencia de verificación en cierta estructura pasada desde el área de usuario como argumento a la función ‘__sys_recvmmsg’. Esta función terminará por usar la estructura pasada a espacio del kernel sin ningún tipo de comprobación. Si observamos el código del commit: 
 
http://1.bp.blogspot.com/-iZvdSVccaSI/Uu_qAGD_FAI/AAAAAAAAAgs/D5phz1Vlg_Y/s1600/kernel1.png
 
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/net/compat.c?id=ee4fa23c4bfcc635d077a9633d405610de45bc70
 
En primer lugar vemos como la función ‘compat_sys_recvmmsg’ recibe en uno de sus parámetros (el último) un puntero a una estructura ‘timespec’. Dicho parámetro está marcado por la macro ‘__user’ que indica que dicho parámetro procede del área de usuario. 
 
Posteriormente vemos como si está definido ‘COMPAT_USE_64BIT_TIME’ dicho parámetro es usado en la llamada a la función ‘__sys_recvmmsg’. Ahí está el problema, y es grave. Jamás se debería acceder a la memoria del kernel desde el espacio de usuario y no filtrar previamente dicha estructura es lo que hace precisamente la función vulnerable. 
 
Tal y como señalan en la lista oss-security (de lectura altamente
recomendable) http://seclists.org/oss-sec/2014/q1/187 uno de los parches propuestos filtra dicho parámetro a través de la llamada a la función ‘copy_from_user’ para comprobar si las referencias a memoria se están haciendo al espacio de usuario en vez de a la memoria del núcleo o si tiene capacidad para lectura/escritura. En dicho caso se provocaría un fallo y se devolvería el error -EFAULT. 
 
Vemos parcialmente el parche aquí y observamos las llamadas a la función comentada y a su homónima ‘copy_to_user’ cuando la operación es a la
inversa: 
 
http://4.bp.blogspot.com/-HL5aB7V6NQA/Uu_qSpQf_AI/AAAAAAAAAg0/2kID-6IOrDc/s1600/kernel2.png
 
En principio la vulnerabilidad afecta a los kernel Linux desde la versión 3.4, aunque ha de estar definida la opción ‘CONFIG_X86_X32’. 
Esto podemos comprobarlo en el archivo de configuración de arranque (en algunas distribuciones): 
 
/boot/config-* (donde * es la versión del kernel que podemos ver también haciendo uname -r) 
 
Como curiosidad lo que esta opción permite es tener la capacidad de ejecutar binarios que usen punteros de 32 bits ejecutándose en arquitecturas de 64bits. 
 
Opina sobre esta noticia: 
http://unaaldia.hispasec.com/2014/02/exploits-de-elevacion-de-privilegios-en.html#comments
 
Más información:
 
Exploit 1
http://www.exploit-db.com/exploits/31346/
 
Exploit 2
http://www.exploit-db.com/exploits/31347/
 
PoC
http://www.exploit-db.com/exploits/31305/

Fuente:
David García
dgarcia@hispasec.com
Laboratorio Hispasec
www.hispasec.com

Imagen: 
Fotos Digitales Gratis
www.fotosdigitalesgratis.com
 
Logos/Imágenes MR Respectivas Compañías mencionadas en la noticia.
Portal de Seguridad Informática, Tecnología e Internet
Descargas Antivirus/Antimalware
www.antivirusgratis.com.ar