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 a 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 a 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/kern...in;h=c18d0fe535a73b219f960d1af3d0c264555a12e3
Parche para la rama 2.4:
git.kernel.org - linux/kernel/git/torvalds/linux-2.6.git/commitdiff
Opina sobre esta noticia:
Comentario para una-al-dia 16/08/2009. Elevación de privilegios en el kernel Linux desde el año 2001
Más Información:
CVE:
CVE-2009-2692
Red Rat bugzilla:
https://bugzilla.redhat.com/show_bug.cgi?id=516949#c10
struct proto_ops:
LXR linux/include/linux/net.h
struct proto_ops bnep_sock_ops
LXR linux/net/bluetooth/bnep/sock.c
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 a 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 a 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/kern...in;h=c18d0fe535a73b219f960d1af3d0c264555a12e3
Parche para la rama 2.4:
git.kernel.org - linux/kernel/git/torvalds/linux-2.6.git/commitdiff
Opina sobre esta noticia:
Comentario para una-al-dia 16/08/2009. Elevación de privilegios en el kernel Linux desde el año 2001
Más Información:
CVE:
CVE-2009-2692
Red Rat bugzilla:
https://bugzilla.redhat.com/show_bug.cgi?id=516949#c10
struct proto_ops:
LXR linux/include/linux/net.h
struct proto_ops bnep_sock_ops
LXR linux/net/bluetooth/bnep/sock.c