lunes, 17 de agosto de 2009

16/08/2009 Elevación de privilegios en el kernel Linux desde el año 2001

NO SUELO ESCRIBIR NI CITAR NOTICIAS SOBRE LINUX PORQUE NO MANEJO ESTE SISTEMA PERO POR SER ESTA NOTICIA TAN IMPORTANTE LA PONDRE.

Existen varios errores de validación en los valores de la estructura de datos "proto_ops". Esto podría ser aprovechado por un atacante local para elevar privilegios a través de llamadas a funciones con una estructura de datos "proto_ops" especialmente manipuladas. Esta vulnerabilidad existe desde el año 2001, y afecta a los kernel 2.4 y 2.6 de Linux.

La estructura "proto_ops" está definida en la librería net.h de Linux. Los protocolos usan esta estructura para realizar distintas funciones: bind, connect, etc.

Cuando un protocolo no va ha implementar una de estas funciones debería asignar la función "sock_no_*" adecuada. Por ejemplo en el caso del puntero "sendpage" cuando este valor no va ha ser usado debería de ser inicializado a la función "sock_no_sendpage" que está definida e implementada en sock.h y sock.c respectivamente.

La estructura "proto_ops" debería ser inicializada por completo por los distintos protocolos implementados en Linux, pero no siempre es así; por ejemplo en "bnep_sock_ops" (el tipo "proto_ops" de bluetooth) el campo "connect" entre otros, sí apunta a "sock_no_connect" sin embargo los campos "getsockopt", "compat_setsockopt", "sendpage" y "splice_read" no son definidos haciendo referencia a un puntero nulo.

Se hecho público un exploit que aprovecha esta vulnerabilidad.

Parche para la rama 2.6:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.4.37.y.git;a=commitdiff_plain;h=c18d0fe535a73b219f960d1af3d0c264555a12e3

Parche para la rama 2.4:
http://git.kernel.org/linus/e694958388c50148389b0e9b9e9e8945cf0f1b98

FUENTE HISPASEC.COM