Cómo comprobar y mitigar fácilmente la vulnerabilidad en Bash o Shellshock

En estos últimos días se ha descubierto la vulnerabilidad en Bash (también conocida como Shellshock Bug) con los CVE-2014-6271 y CVE-2014-7169 que permite ejecutar código arbitrario en sistemas Linux, OS X y Unix que utilicen esta shell como intérprete de la de comandos. Por lo tanto, en sistemas vulnerables, se puede acceder a PCs y/o servidores que utilicen este sistema operativo.

Explicación de la vulnerabilidad

Básicamente, el problema reside en que bash ejecuta los comandos que encuentre después de la definición de una función en una variable de entorno. Por lo tanto, el siguiente comando debería definir una función llamada functionX que no hace nada (el cuerpo de la función es lo que está entre llaves {}). Pero la raíz del problema es que después bash sigue leyendo y ya no sólo se limita a leer valores sino a ejecutar el código restante, en este caso echo Sistema Vulnerable, que imprime "Sistema Vulnerable" por pantalla:

env functionX='() { :;}; echo Sistema Vulnerable' bash -c "echo Esta es una prueba"


Explotación local

Para comprobar si un sistema es vulnerable o no, solo basta con ejecutar localmente dicho comando.


Explotación remota

Para explotar remotamente este fallo lo que había que hacer en servidores que generan páginas con bash es crear una petición en la que la cabecera User Agent sea algo como () { :; }; comandoaejecutar

Según el comando que se ejecute se puede tumbar los servidores vulnerables en un momento hasta montar una enorme botnet, pasando por supuesto por montar ataques de denegación de servicio haciendo que todos los vulnerables envíen tráfico a un cierto objetivo.

Impacto global de la vulnerabilidad

Cabe destacar que en apenas unas horas y con una búsqueda automatizada muy ingenua, en Errata Sec han encontrado más de 3.000 servidores vulnerables. Y perfeccionando un poco esa búsqueda con más capacidad de escaneo, un atacante se podría hacer con muchos sistemas. De hecho, esos ataques ya están en marcha.

Además, en Redhat explican que DHCP podría ser otro punto de ataque, ya que permite que el servidor pase variables de entorno que serían interpretadas por el cliente.

Cómo mitigar la vulnerabilidad

Debido a que todavía no existe un parche de seguridad, lo que queda es mitigar la vulnerabilidad y no resolverla desactivando bash y usar otra shell hasta que esté cien por cien parcheado.

Para usar otra shell, primero hay que comprobar que se esté utilizando bash con el siguiente comando:

echo $SHELL

Si en la prueba anterior se ha detectado que el sistema es vulnerable, entonces se deberá tener una salida como la siguiente:


Para listar las shells instaladas en el equipo bastará con ejecutar "cat /etc/shells" o "cat /etc/shell" (esto depende de la distribución) obteniendo algo similar a:


En el caso de no tener ninguna o no estar la que se desee, habrá que instalar una shell apropiada para el sistema operativo. Hay un apartado de Shells para Debian, y muchas mas en el artículo
Evolution of shells in Linux de IBM.



Entradas populares de este blog

Trinity Rescue Kit: Tutorial para eliminar la contraseña de administrador en Windows

Cómo extraer el handshake WPA/WPA2 de archivos de captura grandes