Ben Hawkes, un reconocido hacker habitante de Zurich, publicó el pasado 15 de septiembre un par de profundos reportes que dieron la vuelta al mundo (al de Linux, por lo menos). ¿De qué trataron? De una vulnerabilidad encontrada en el software que permite la compatibilidad de ejecutables de 32 bits en sistemas de 64 bits.

Explotada de forma adecuada, la vulnerabilidad permite al atacante obtener un shell con privilegios de superusuario. En palabras (irónicas) del hacker

El modo de compatibilidad de 32 bit en los kernel Linux de 64 bits […] es un poco de miedo.

Hawkes argumenta que el kernel Linux está aún más expuesto debido a sutiles detalles de programación que probablemente muy pocos programadores tienen en consideración. Esto trae consigo posibilidades reales de «maluso y abuso». Afortunadamente ya existe un parche en el kernel y empresas como Red Hat ya respondieron de la misma forma.

¿Qué hay de la historia detrás de ese agujero?

Según cuenta Hawkes, un amigo le mostró semanas atrás un bug que en principio no implicaba más que un desbordamiento en una multiplicación de enteros en el argumento de una función. La curiosidad e intuición le llevaron a establecer una hipótesis que luego comprobaría:

que eso era un indicador de algunos hábitos de programación muy poco defensivos, así que me puse a enumerar todos los casos que de esa conducta que pude encontrar.

En un principio Hawkes pensó que encontraría la forma de hacer un desbordamiento de heap (el lugar donde nuestro sistema operativo aloja memoria dinámicamente para nuestros programas). Pero no fue así. Lo que halló después de su análisis fue todo lo contrario: un subdesbordamiento de pila. Específicamente

[…] mi apuntador a pila en el espacio de usuario ha sido decrementado hacia el espacio del kernel.

El hacker encontró que la función del kernel con facultad para revisar que eso no suceda se encuentra en arch/x86/include/asm/compat.h, con respecto a las fuentes del kernel. Dicho de otra manera: en ese archivo encontró una puerta abierta al kernel, tan grande como para permitir acceso privilegiado a lugares no autorizados de la memoria.

En seguida de algunas pruebas de concepto, Hawkes llamó a su amigo Robert Swiecke para escribir un exploit para ese agujero de seguridad. Curiosamente, el mismo bug del hemos estado hablando en esta breve historia fue descubierto y ¡remediado! en 2007. Es sólo que en algún momento de 2008 fue ¡destapado por los mismos desarrolladores! Más aún, fue Swiecke quien escribió un conocido exploit para aquella vulnerabilidad en 2007.

Hawkes y Swiecke ya publicaron un exploit actualizado… Y este es el fin de esta breve historia.

Antes hemos hablado de otros agujeros de seguridad en el kernel Linux. En cada caso la comunidad ha reaccionado rápidamente y como sucede en estos temas, es de suma importancia actualizar nuestro software. No lo olviden.