Hace unos días atrás pude tomar unos minutos para hacer la primera parte de unas lecciones para programar en Bash. Al día siguiente se publicó una vulnerabilidad en Bash, este mismo lenguaje, al parecer, un atacante puede cagarse (soy panameño, déjenme SER como dice Roba Morena) en un servidor que use CGI, servidor DHCP o alguna computadora que use procesos de bash.

Este post es relacionado a como explotarlo…

Para funcionar, los programas necesitan datos. Supongamos un servidor de Internet que llama a un script de bash para generar una página web. Este script necesitará datos, como las cookies, la ruta de la página que se pide o la cadena que identifica al navegador (user-agent). La forma de pasar estos datos a bash son las llamadas variables de entorno.
La analogía sería que tu ordenador es una habitación. Tú, el servidor, tu recibes una petición de un usuario y escribes algunos datos sobre esa petición en una pizarra. Luego llamas a bash para que pase a la habitación y haga lo que tiene que hacer. Y una de las primeras cosas que hará será leer de la pizarra los datos que le has dejado (las variables de entorno).
Normalmente, esto funciona bien. La shell (bash) llega, lee los datos, ejecuta sólo lo que tiene que ejecutar y listos. El problema es que a veces, con una cadena especialmente preparada, no sólo lee los datos sino que los ejecuta. Más concretamente, bash ejecuta los comandos que encuentre después de la definición de una función en una variable de entorno. Algo como esto:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
debería definir una función llamada x que no hace nada (el cuerpo de la función es lo que está entre llaves {}). La cuestión es que después bash sigue leyendo y ya no sólo se limita a leer valores sino a ejecutar el código que viene, en este caso echo vulnerable, que imprime “vulnerable” por pantalla. (sacado de genbeta)

 Explotación:

No les enseñare a tomarse servidores y hacer botnets con eso, si están pensando que es eso, están muy equivocados…

Pero les enseñaré como saber si una computadora tiene la vulnerabilidad.

Vamos a nuestra terminal (funciona con OS X, Linux (casi todas las distribuciones), *nix en algunas versiones como BSD, entre otros) ingresamos los este comando:

env x='() { :;}; echo HackingPanama' bash -c "echo Este Sistema es Vulnerable"

Captura de pantalla de 2014-09-25 20:43:45

Al momento de hacer esto, damos enter para crear la consulta…

Nos entregará esto:

Captura de pantalla de 2014-09-25 20:43:48

¿El problema?

Quizá un “echo” no haga nada que envidiar… ¿Pero que tal si podemos correr un apt-get instal?

Captura de pantalla de 2014-09-25 20:46:39

Que tal… Si hacemos un “shutdown -h now”

Que tal… ¿Si dumpeamos toda la información de mi computadora a un servidor FTP? ¿Borramos la computadora completa?

La única comparación a este problema es los fallos del 2012-2013 de JAVA. Actualmente hay un parche a la vulnerabilidad pero como siempre… Ya ha sido bypasseado con este comando:

env X='() { (a)=>\’ sh -c “echo CualquierCosa”; bash -c “echo Sistema Vulnerado con ShellLock”

Esto ha sido todo por hoy little hackers, cualquier cosa pueden comentar o seguirnos a nuestras redes sociales como @HackingPanama en twitter y en facebook como https://www.facebook.com/hackingpanama.

CISO en el lado del mal (Panamá Gov) - Ethical Hacker - CEDIIF - Pentester. Si nunca has estado del lado oscuro, jamás sabrás como combatir a la oscuridad, con esto ya sabes la mitad de la historia.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

19 − 13 =