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

por | 25 septiembre, 2014

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 pensamientos en “Descubre si eres vulnerable al último agujero de seguridad en Bash

  1. Bisnux

    Demonios!!!!!!,
    Tengo servidores productivos criticos, en RHEL, seria posbile solo actualizar la version de bash ?
    o necesariamente actualizar la Distro?
    Saludos

    Responder
    1. tannhausser Autor

      Así es! deberías hacer una actualización de los paquetes de tu distro para solucionarlo.

      Responder
  2. D'Artagnan

    Si no recuerdo mal hace ya algún día instalé mediante «you» un parche de seguridad que dejaba zanjado este asunto. Estoy hablando de OpenSUSE.

    Responder
    1. tannhausser Autor

      De la primera vulnerabilidad es muy posible porque echando un vistazo en yast veo una referencia del 18 de septiembre a CVE-2014-6271 en una versión de Bash.

      Otra cosa es de la segunda a la que se refiere la actualización del post esa recien fue descubierta ayer a última hora y en realidad hace referencia a algunos aspectos que quedaron sin parchear.

      https://twitter.com/taviso/statuses/514887394294652929

      Responder
  3. jvare

    En las versiones basadas en Debian, (Mint, Ubuntu…)también está disponible el primer parche y hay que actualizar cuando sale el mensaje de actualizaciones disponibles, para solucionar la primera vulnerabilidad.

    Responder
    1. tannhausser Autor

      Mientras tanto en Apple dicen que están trabajando «a toda velocidad» en un parche para sus usuarios avanzados…el resto si eso ya tal…que diría el inútil de Rajoy XD

      Saludos colega!

      Responder
  4. Juanca_Cba

    Muchas gracias por el seguimiento completo del bug!
    Me enteré por tu entrada antes que por ningún otro medio.
    Esto es un blog de calidad.
    Nota: atentos a la vulnerabilidad de nss también, informada esta semana y ya con actualización de paquetes y dependencias (al menos en algunas distros).
    Saludos.

    (Este comentario va aquí, ahora sí)
    ________________________________________________________________

    No NSA softwares were used in the making of this comment

    Responder
    1. tannhausser Autor

      Gracias amigo! le echaré un vistazo a lo de nss (ahora de moda por lo de netflix y ubuntu) aunque seguro que no es tan grave como lo de bash («virus bash» le llaman algunos…prensa seria dicen…)

      Está claro que el software libre no es invulnerable pero a la hora de reaccionar lo hace antes que nadie 🙂

      Un saludo!

      Responder
      1. Santiago

        Saludos replicante.

        Quería preguntarte que versión de bash tienes en tu antergos?
        Yo estoy utilizando debian testing.
        basico@zero:/tmp$ bash -version
        GNU bash, versión 4.3.42(1)-release (x86_64-pc-linux-gnu)
        Copyright (C) 2013 Free Software Foundation, Inc.
        Licencia GPLv3+: GPL de GNU versión 3 o posterior

        This is free software; you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.

        Y he hecho unas pruebas con:

        basico@zero:/tmp$ env x='() { :;}; echo ¿Estoy afectado?’ bash -c «echo Sí, debes actualizar»

        Si el sistema está afectado nos aparecerá:

        env x='() { :;}; echo ¿Estoy afectado?’ bash -c «echo Sí, debes actualizar»
        ¿Estoy afectado?
        Sí, debes actualizar

        Para comprobar si la actualización que hemos instalado es la completa, debemos usar lo siguiente:

        env X='() { (a)=>’ sh -c «echo ¿sigo siendo vulnerable?»; bash -c «echo Sí, todavía lo eres»

        Si no estamos afectados, tras instalar todos los updates veremos:

        root@zero:~# env X='() { (a)=>’ sh -c «echo ¿sigo siendo vulnerable?»; bash -c «echo Sí, todavía lo eres»
        sh: X: línea 0: error sintáctico cerca del elemento inesperado `=’
        sh: X: línea 0: `X () { (a)=>’
        sh: error al importar la definición de la función para `X’
        ¿sigo siendo vulnerable?
        Sí, todavía lo eres

        >>En el caso de tener la actualización parcial se verá:

        env X='() { (a)=>’ sh -c «echo ¿sigo siendo vulnerable?»; bash -c «echo Sí, todavía lo eres»
        ¿sigo siendo vulnerable?
        Sí, todavía lo eres

        Parece ser que todavía no se soluciona el problema.
        O soy yo el único que tiene el problema?

        Responder
        1. tannhausser Autor

          Hola! acabo de ver tu mensaje, en mi caso tengo también la versión 4.3.42 de bash, puedes estar tranquilo, ese bug se resolvió hace tiempo.

          Responder
          1. NovakTiño

            Hola. El único comando que me funciona del artículo es:
            cd /tmp; rm -f /tmp/echo; env ‘x=() { (a)=>\’ bash -c «echo date»; cat /tmp/echo

            Linux Mint Mate 17.3
            bash -version
            GNU bash, versión 4.3.11(1)-release (x86_64-pc-linux-gnu)
            Copyright (C) 2013 Free Software Foundation, Inc.
            Licencia GPLv3+: GPL de GNU versión 3 o posterior

            Los comandos del usuario Santiago, solo muestran > . No ejecutaron texto.

Responder a tannhausserCancelar respuesta

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