Descubierta (y corregida) una vulnerabilidad grave en el kernel Linux

Descubierta (y corregida) una vulnerabilidad grave en el kernel Linux
18 comentarios Facebook Twitter Flipboard E-mail

No es un buen año para los administradores de sistemas. A los fallos en librerías SSL como Heartbleed se une hoy un fallo grave en el núcleo Linux que permitiría a un atacante hacerse con el control completo de un ordenador con sólo ejecutar un programa.

El fallo se habría introducido en 2009 en la versión 2.6.31-rc3 del kernel: cinco años en los que la vulnerabilidad ha pasado desapercibida (o al menos, eso esperamos). Sólo ha sido descubierta por un desarrollador que estaba haciendo pruebas y que la ha reportado de inmediato para que sea corregida. El parche para el núcleo Linux ya está disponible y la mayoría de distribuciones ya han publicado la actualización en sus repositorios.

La vulnerabilidad está en el sistema de terminales virtuales (PTY), que permite simular terminales para interactuar con ciertos procesos. Por ejemplo, es lo que usa vuestro programa de consola (Konsole, GNOME Terminal, iTerm...) para poder interactuar con la terminal del sistema (suele ser _bash_ si no lo habéis cambiado).

Cuando la PTY se configura con dos opciones concretas (LECHO, !OPOST), el sistema espera que sólo haya un proceso escribiendo al mismo tiempo. Lo que hace el _exploit_ es precisamente lo contrario: lanzar dos procesos (técnicamente, dos hilos) que escriben al mismo tiempo en la misma terminal. Por asi decirlo, es como si conectáis dos teclados al ordenador y escribís en los dos al mismo tiempo.

Esto es lo que se llama una _condición de carrera_ en informática: hay dos tareas ejecutándose a la vez, y dependiendo del orden en el que ejecuten cada instrucción se puede producir un fallo. En este caso, si la ejecución es como la que veis en la siguiente tabla, el atacante consigue que el núcleo escriba en un espacio de memoria que no estaba reservado.

Hilo 1Hilo 2
Reserva espacio para escribir (Respuesta: reservado de 0 a 5)
Reserva espacio para escribir (Respuesta: reservado de 5 a 10, siguiente escritura empieza en 5)
Escribe "Hola!" y marca la última posición para la siguiente escritura (Respuesta: escrito desde 5 a 10, siguiente escritura en posición 10)
Escribe "Hola!" y marca la última posición para la siguiente escritura (Respuesta: escrito desde posición 10 en espacio no reservado)

¿Qué puede pasar cuando este ocurre? El otro día vimos a raíz de la vulnerabilidad de Internet Explorer que fallos de este tipo, en los que un programa escribe más allá del espacio que tiene reservado, pueden permitir al atacante ejecutar el código que quiera. En este caso, en la prueba de concepto que se ha compartido, el _exploit_ llama a dos funciones del núcleo de Linux que dan permisos de administrador (_root_) al programa que se está ejecutando. Es decir, que con sólo ejecutar un programa, el atacante tiene acceso ilimitado al ordenador.

Un vistazo a…
Cómo mejorar la SEGURIDAD EN INTERNET: VPN, DNS y páginas con HTTPS

¿A quién y cómo afecta este fallo?

El fallo afecta principalmente a máquinas Linux compartidas, como por ejemplo servidores de _hosting_ compartido. En ellos, cada usuario tiene una cuenta restringida para que sólo pueda moverse en sus propios archivos y no hacer nada malo. Con este _exploit_, podría escalar privilegios y tomar control de todo el servidor compartido.

También es posible que se use este fallo como parte de una "cadena" de ataques. Un atacante consigue entrar en una cuenta sin privilegios en un ordenador remoto aprovechando otra vulnerabilidad, y gracias a este _exploit_ se hace con el control completo del sistema. Podría afectar incluso a sistemas Android, especialmente vulnerables por culpa de las políticas de actualización de los fabricantes.

Por suerte y como decíamos arriba, la vulnerabilidad ya ha sido corregida y ya está en los repositorios de las principales distribuciones, así que deberíais actualizar en cuanto podáis.

Vía | Ars Technica
Más información | Parche en el kernel Linux

Comentarios cerrados
Inicio