Un nuevo fallo, que en realidad es antiguo, se ha descubierto en el kernel Linux. La vulnerabilidad data del 2001 y afecta a las ramas 2.4. y 2.6, permitiendo la escalación de privilegios de manera local.
Tavis Ormandy y Julien Tinnes dos integrantes del equpo de seguridad de Google han descubierto un fallo en el kernel Linux que puede ser explotado de manera sencilla, tal como lo han hecho saber en el blog de Tinnes. En sus propias palabra la vulnerabilidad consiste en lo siguiente:
«El problema está en como Linux reacciona con operaciones no disponibles para algunos protocolos. sock_sendpage y otros no comprueban que no haya punteros a NULL antes de ‘dereferenciar’ las operaciones en la estructura de operaciones. En vez de eso, el kernel confía en la correcta inicialización de esas estructuras de proto_ops con esbozos (como sock_no_sendpage) en vez de punteros a NULL».
También ofrecen un ejemplo (exploit) de como se podría aprovechar la vulnerabilidad, sin mayores complicaciones. Un usuario con acceso local al sistema y con acceso a la linea de comandos puede ejecutar el código para provocar una escalada de prvilegios que le daria control total al sistema.
El fallo no había sido descubierto durante todos estos años, o por lo menos, no se había hecho publico, ya que arreglarlo no es complicado.
Red Hat ha publicado la forma de mitigar el problema, mientras parchean la vulnerabilida desde la distro. Así también, ya desde el equipo del kernel Linux se ha publicado la solución para repararlo.
En poco tiempo las distribuciones harán disponible una actualización para corregir el fallo. En el caso de Debian ya tienen publicado la corrección para la rama 2.6, tanto para el antiguo etch, como el actual Lenny estable, versión muy utilizada en servidores.
Enlaces de interés:
www.kernel.org
Referencias:
Barapunto, CR0 Blog
Habian implementado un workaround hace algun tiempo (no recuerdo con exactitud cuando) que consiste en no permitir un mmap() por direcciones debajo de los 4 Kilobytes.
Habria que hacerle un cat al /proc/sys/vm/mmap_min_addr para ver como es el cuento.
El caso es que si el resultado es mayor a 0 (generalmente deberia ser 4096 o mayor), lo mas probable es que ese exploit no vaya a funcionar.
De todas formas, tengo entendido que hay una politica/implementacion de SElinux que en algunos casos permite por defecto que todo usuario pueda hacer un mmap_min_addr = 0, asi que no es del todo confiable guiarse solo por el valor de /proc/sys/vm/mmap_min_addr.
De todas formas es importante darle solucion a ese problemita.
Pues les aclaro que el fallo sólo ocurre en redes que utilizan en el obsoleto protocolo Appletalk de Apple, no en el TCP/IP que generalmente utilizamos.
El mismo Linus dice en su commit (http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e694958388c50148389b0e9b9e9e8945cf0f1b98)
“Does anybody really care about sendpage on something like Appletalk? Not likely.”
Saludos,
adrruiz