Exploits de elevación de privilegios en el kernel Linux (CVE-2014-0038)

Se han publicado dos exploits y una prueba de concepto para la 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. (http://en.wikipedia.org/wiki/X32_ABI)
 Fuente

__________

NOTA: Los interesados en información sobre contrato de soporte Asistencia Tecnica de SATINFO y/o licencia de uso/actualizaciones de sus utilidades, contacten con info@satinfo.es
__________

Este blog no se hace responsable de las opiniones y comentarios de los textos en los que se cita la Fuente, ofreciendo su contenido solo para facilitar el acceso a la información del mismo.

Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Los comentarios y los pings están cerrados.

Los comentarios están cerrados.

 

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies