Descubre si eres vulnerable al último agujero de seguridad en Bash

hacker-hole

Un grave fallo de seguridad en Bash permitiría ejecutar código arbitrario arbitrario dejando expuestos a multitud de usuarios en sistemas Linux, OS X y Unix que utilicen este shell como intérprete de la de comandos.

La vulnerabilidad permite crear variables de entorno con valores especialmente diseñados antes de llamar a la shell bash, algo que sería especialmente peligroso en el caso de servidores web que podrían ser obligados a ejecutar código utilizando diferentes vectores de ataque: servidores apache usando scripts CGI, Secure Shell, Clientes DHCP que invocan un shell para configurar el sistema, etc..

Una explicación mucho más detallada de como funciona esta vulnerabilidad la podéis encontrar en los blogs de los colegas ochobitshacenunbyte o JsiTech.

Por suerte la mayoría de distros importantes ya disponen de un parche que en principio soluciona esta vulnerabilidad.

Existen diferentes maneras de detectar si estamos expuestos a este fallo de seguridad de bash

bash_vulnerabilidad

A mi me gusta esta linea de comandos que nos recomiendan ejecutar en el blog de Red Hat:

env x='() { :;}; echo OOPS' bash -c /bin/true

Si estamos afectados por este error nos retornará

vulnerable
OOPS

que nos indica que debemos protegernos y por lo tanto actualizar nuestra versión de Bash

Como veis en la imagen superior tenía una versión antigua y por lo tanto vulnerable así que actualicé los paquetes de mi distro (en este caso openSUSE), que automáticamente me instaló la versión de bash-4.2-68.4.1.

Ahora al repetir el comando anterior ya me da un resultado muy diferente:

bash: aviso: x: ignoring function definition attempt
bash: error al importar la definición de la función para `x'

bash_vulnerabilidad2

Esa salida de error significa que ya no se ejecuta el código al que llama esa función y que por lo tanto ya no somos vulnerables.

Actualización 25/06/2014

Lo de que ya no «somos vulnerables» vamos a dejarlo entre comillas puesto que se ha descubierto que la actualización propuesta para CVE-2014-6271 o ShellShock como ya es mundialmente conocida es incompleta.

Según Red Hat «Un atacante puede proporcionar variables de entorno especialmente diseñados que contienen comandos arbitrarios que se ejecutarán en los sistemas vulnerables en ciertas condiciones«

Esta nueva vulnerabilidad que ha sido asignada como CVE-2014-7169 es menos crítica que la anterior y en todo caso se recomienda aplicar el parche parcial propuesto por Red Hat y el resto de distribuciones GNU/Linux hasta que en las próximas horas se resuelva de forma definitiva.

Para saber si estamos afectados (que a estas horas sería lo normal) podemos ejecutar el comando:

env x='() { :;}; echo vulnerable' bash -c "echo alarma alarma"

si en la salida de comandos encontráis la linea «alarma alarma«

bash: aviso: x: ignoring function definition attempt
bash: error al importar la definición de la función para `x'
alarma alarma

ya sabéis un poco de relax… y tomaros algo mientras esperáis la actualización correspondiente del equipo de seguridad de vuestra distro, la cual debe estar al caer 😉

Actualización 27/09/2014

Mientras los primeros parches no nos ofrecían una protección completa de todas las vulnerabilidades de Shellshock, las sucesivas actualizaciones que se han realizado en Bash hace que este bug este prácticamente solucionado en todas las distros GNU/Linux.

Y con nuevos paquetes, nuevo test que nos proporcionan desde Red Hat

cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo

si nuestro sistema no es vulnerable y ha sido correctamente parcheado nos tiene que dar algo como esto

date
cat: /tmp/echo: No existe el fichero o el directorio

bash-test

Si por el contrario todavía no habéis instalado el parche a vuestra distribución para CVE-2014-7169 os señalará la vulnerabilidad de una manera similar a esta

bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
sáb sep 27 22:19:34 CEST 2014

en la salida de terminal veremos que se muestra la hora y la fecha, además de crearse un archivo en /tmp/echo

Esperemos que este parche sea la solución definitiva y no tenga que volver a daros la lata con nuevas actualizaciones de este post.
Imagen | *sax (CC BY 2.0)

19 comentario en “Descubre si eres vulnerable al último agujero de seguridad en Bash”

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.