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
http://git.kernel.org/linus/e694958388c50148389b0e9b9e9e8945cf0f1b98
FUENTE HISPASEC.COM
No hay comentarios:
Publicar un comentario