A continuación reproduzco la entrada del sitio de seguridad informática de la UCI, pero que está dándole la vuelta al mundo por Internet en distintos sitios sobre Software Libre:

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 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 continúa 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 “Adiós 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:

google-cgi-bash

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..

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.

Actualización 1:

Como ya es sabido, el parche que había salido proveía una solución incompleta que aún permitía la inyección de algunos caracteres a través de variables de entorno especialmente modificadas en condiciones específicas, lo cual fue registrado bajo el nuevo código CVE-2014-7169. Hace apenas unas horas Red Hat liberó un nuevo parche que solventa esta última vulnerabilidad. Pronto deben estar disponibles nuevas actualizaciones de Bash para el resto de las distribuciones.

Actualización 2:

Ya está en el repositorio de Ubuntu la nueva actualización de Bash que corrige ambas vulnerabilidades (CVE-2014-6271 y CVE-2014-7169).