Vulnerabilidad en Bash explotable remotamente – CVE-2014-6271

Hoy nos hemos levantado con una noticia a la altura del reciente Heartbleed: una vulnerabilidad en el intérprete de comandos Bash permite la posibilidad de ejecutar código remoto en la máquina. Esta vulnerabilidad ha sido catalogada como CVE-2014-6271 con una puntuación de CVSS de 10.

Están afectadas todas las versiones hasta 4.3 incluida. La vulnerabilidad se produce cuando el intérprete no procesa adecuadamente las variables de entorno. Mediante la declaración de funciones puede incluir al final código que será ejecutado independientemente del nombre de la variable; esto es especialmente crítico en servidores web que tengan instalados módulos CGI. Una forma rápida de comprobar si somos vulnerables o no es ejecutando el siguiente código:

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

En ambos casos aparecerá lo último por pantalla ‘prueba en bash’. Si se muestra por pantalla la cadena de texto ‘vulnerable’, nuestra versión de bash estará afectada ya que ha seguido ejecutando el código añadido a la cola de la función; por el contrario, si vemos el siguiente mensaje de error, quizá no seamos tan vulnerables:

bash: warning: x: ignoring function definition attempt

bash: error importing function definition for `x’

La última frase no se ha dicho de forma arbitraria: pese a que ya ha sido publicado un primer parche, una investigación en profundidad del mismo ha demostrado que aún tiene posibles vectores de ataque, por lo que habrá que esperar a una nueva actualización para poder decir que ya está completamente solucionado.

Más información:

Comments

  1. Muy buen post David ;)

    En el hilo de reddit hay una discusión muy interesante donde aparecen bastantes explicaciones sobre cómo funciona la vulnerabilidad, y también pruebas de concepto que sobrepasan el primer parche que se ha publicado.

    http://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/

    Por si alguien no tiene tiempo de leer todo, el PoC que se salta este primer parche es:

    rm -f echo && env -i X='() { (a)=>\’ bash -c ‘echo date’; cat echo

    Aunque aparezcan errores como los que se indican en el post, si al final del todo se muestra la fecha actual significa que sigues siendo vulnerable.

  2. Según parece, guardar el comentario ha hecho estragos con las comillas simples de la prueba de concepto. Si alguien lo prueba que recuerde cambiarlas.

  3. Muchas gracias Jose. Me habría gustado darle un par de vueltas más o incluso incluir alguna imagen de pruebas con un servidor personal que tengo, pero el tiempo ha jugado en mi contra.

  4. ¿A parte de los CGI en bash? ¿Hay algun otro vector de ataque externo claro? ¿Alguna vulnerabilidad presente en sistemas instalados por defecto?

  5. Todavía están saliendo vectores de ataque. Se ha hablado de DHCP y CUPS, y en twitter han sacado una prueba de concepto con SSH: https://twitter.com/falcon_lownoise/status/515215501069254656

    Veremos como va avanzando el tema.

  6. Veremos :-) , por ahora DHCP y CUPS no son servicios a priori visibles en Internet.

  7. Lo del SSH si que es preocupante, tampoco deberia de estar abierto desde Internet, pero de ese servicio si que hay millones visibles…