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
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'
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
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)
Gracias por la mención : )
Llevo toda la mañana en el trabajo actualizando todos los servidores, grrr
Saludos!
Animo y mucha paciencia! 🙂
Demonios!!!!!!,
Tengo servidores productivos criticos, en RHEL, seria posbile solo actualizar la version de bash ?
o necesariamente actualizar la Distro?
Saludos
Si solo tienes que actualizar la version que asi tapa esa vulnerabilidad.
Listo con esto:
yum clean all && yum update bash
Sin reiniciar
Gracias.
soy nuevo en esto, pero si solo aparece OOPS tambien estas afectado?
Así es! deberías hacer una actualización de los paquetes de tu distro para solucionarlo.
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.
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
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.
Ayer mismo apareció una actualización para Manjaro, se instaló y listo !!! no hay problema por estos lares.
Es posible que en las próximas días/horas haya alguna actualización más, según se vaya descubriendo alguna que otra inseguridad menor como esta:
https://access.redhat.com/security/cve/CVE-2014-7186
Parece que Debian ha hecho sus deberes.
Saludos.
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!
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
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!
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?
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.
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.