FYI

José Alejandro Sabastizagal Orellana
http://www.42.com.pe
http://www.sabastizagal.com




---------- Mensaje reenviado ----------
De: <[email protected]>
Fecha: 26 de septiembre de 2014, 4:04
Asunto: una-al-dia (25/09/2014) Bash. Significa golpe, porrazo o castaña.
Para: [email protected]


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

 -------------------------------------------------------------------
  Hispasec - una-al-día                                  25/09/2014
  Todos los días una noticia de seguridad          www.hispasec.com
  Síguenos en Twitter: http://twitter.com/unaaldia
  Noticia en formato HTML:
http://unaaldia.hispasec.com/2014/09/bash-significa-golpe-porrazo-o-castana.html
 -------------------------------------------------------------------

 Bash. Significa golpe, porrazo o castaña.
 -----------------------------------------

Sin lugar a dudas, una de las vulnerabilidades del año, con el permiso
de lo que quede por llegar, va a ser esta que vamos a comentar. Su
matrícula es CVE-2014-6271, un número que va a rebotar en la cabeza
de los administradores durante bastantes meses.

Resulta que bash, el intérprete de comandos más extendido en el mundo
UNIX y derivados, tiene una curiosa y oscura funcionalidad que puede
ser abusada hasta el punto de retorcerla y usarla para ejecutar código
arbitrario en sistemas remotos.

Cuando lees una noticia así en una lista de seguridad te viene a la
cabeza la imagen de Gandalf el Gris, detrás de ti, dándote golpecitos en
la cabeza con su bastón mientras te grita "Parchea!!! Insensatooooooo".
No es para menos…

Veamos primero la funcionalidad, presente desde hace años en la misma
página de manual de bash:

"Functions may be exported so that subshells automatically have them
defined with the -f option to the export builtin. A function definition
may be deleted using the -f option to the unset builtin"

Esto es un mecanismo similar a cuando exportamos variables definidas en
un entorno hacia otro proceso.

Vamos a probar la funcionalidad de manera básica:

Primero creamos una función en el intérprete

$function test { echo “hola”;}

Ahora le decimos a bash que la exporte:

$ export –f test

Creamos un nuevo interprete…

$ bash

…y llamamos a la función que acabamos de exportar:

$ test
hola

¿Dónde está el problema?

En el mecanismo que hace de exportación de esa función, la forma en la
que lo hace y como interpreta el código que se inyecta en el entorno
donde es exportada.

Para conseguir esa exportación de funciones bash recurre a un pequeño
"truco". No exporta la función en sí, sino en una variable de entorno
donde se interpreta su valor como el cuerpo de una función. Vamos a
verlo modificando el ejemplo anterior, en vez de una función vamos a
crear una variable de entorno:

$ test=’() {echo “hola”;}’

Exportamos, no una función sino una variable que es lo que haría el
intérprete:

$ export test

Ahora creamos un intérprete y volvemos a invocar nuestra función 'test':

$ bash
$ test
hola

Curioso, ¿verdad?.

Bueno, pues cuando el entorno recibe esta variable y el interprete
detecta la siguiente cadena ‘() {‘ entiende que está ante una función y
comienza a interpretar su código. El problema y aquí entramos en la zona
peligrosa, es que no para de interpretar cuando termina el cuerpo de la
función y continua ejecutando el código que viene detrás del cuerpo.

Por ejemplo, si el intérprete tiene la siguiente variable-función
exportada con código más allá de la definición de la función:

’(){ echo “hola”; }; /bin/ls’

Terminará ejecutando el ‘/bin/ls’ cuando se esté interpretando esa
cadena. No hará falta invocar la función, justo cuando el interprete
procese las cadenas detrás del cuerpo de la función ejecutará el
comando. Idealmente, debería de terminar justo cuando encuentre el '};'
correspondiente pero inexplicablemente no lo hace y peor aun ejecuta
directamente ese código anexado al cuerpo de la función.

¿Por qué es peligroso?

Son muchísimos los vectores. Las variables de entorno y los intérpretes
de comandos son exportados y creados en infinidad de situaciones. El
peligro real, es cuando un proceso remoto acepta cadenas de entrada y
hace uso de ellas a través de variables de entorno. Ahí es donde se
puede inyectar una variable que contenga la cadena ‘(){‘ seguida de
código arbitrario, comandos que terminarán siendo ejecutados por el
proceso.

El ejemplo, ya canónico y que posiblemente veamos estampado en alguna
camiseta, es la mínima expresión de definición de una función en bash
”() { :;};”

Es fácil interpretarlo, el bloque de la función definida contiene el
carácter ‘:’ que en bash no hace nada, simplemente devolver cero. Su
correspondiente en C sería un “return 0;”. A esa cadena por supuesto se
le puede adosar cualquier comando, desde un ‘echo "yo estuve aquí" hasta
un devastador "rm –Rf" o un "curl****/mi_shell.php" para depositarla en
"/var/www/".

En la lista oss-security, donde se dio a conocer públicamente el
problema, exponen un escenario que caracteriza el empleo de este ataque.
Supongamos un script CGI que procesa las cabeceras HTTP mapeando su
clave, valor a variables de entorno. No cuesta imaginar que sucede a
partir de aquí. En el momento que se reciba una petición HTTP con una
cabecera "cocinada" sería posible que dicho sistema termine ejecutando
los comandos que se inyecten desde el exterior.

¿Quién la ha descubierto?

Su nombre es Stephane Chazelas. Francés apasionado del mundo UNIX,
Chazelas no es un nombre muy conocido, hasta ahora, en la comunidad de
seguridad. No se saben los detalles de cómo llegó hasta la
vulnerabilidad, pero es bastante posible que gracias a sus profundos
conocimientos de cómo funcionan las entrañas del sistema le
proporcionará la óptica necesaria para ver aquello que otros no vieron.

Chazelas apostó por informar sobre su hallazgo a las vías adecuadas para
que el problema fuese corregido antes de ser anunciado, aunque casi al
final se filtró por algún medio y se precipitó la publicación de
detalles y parches.

Una reflexión

Si hacemos un repaso de las últimas vulnerabilidades podríamos ver desde
cierta perspectiva que un buen grupo de ellas ya no se asientan sobre
desbordamientos de memoria u otras, llamémoslas vulnerabilidades
clásicas. Este tipo de errores tira más al fondo, a la lógica del
diseño, un territorio donde los fuzzers comienzan a dejar de ser
eficaces (no dejarán de serlo completamente) y se confía más en una
comprensión del problema que solo te puede proporcionar la experiencia y
la capacidad de conectar los vértices que componen la figura final.

Este tipo de errores siempre han existido y el otro tipo, los provocados
por funcionalidades achacables a ciertos lenguajes (sí, C y C++,
vosotros dos) no van a dejar de dar quebraderos de cabeza. Pero los
problemas que derivan de un diseño inadecuado… ¿Qué IDS está preparado
para ello? Quizás pueda parar una cadena pasada por Shikata Ga Nai
ochocientas veces pero ¿Cómo paras una cabecera HTTP que contiene una
definición de una función que va a ser exportada y de paso ejecutado el
código que viene detrás? ¿Y la funcionalidad heartbeat de OpenSSL? No
hay un detector de diseños defectuosos, no lo habrá nunca. Jamás.

Opina sobre esta noticia:
http://unaaldia.hispasec.com/2014/09/bash-significa-golpe-porrazo-o-castana.html#comments

Más información

remote code execution through bash
http://www.openwall.com/lists/oss-security/2014/09/24/11

Bash specially-crafted environment variables code injection attack
https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/


David García
[email protected]
Twitter: @dgn1729


 Tal día como hoy:
 -----------------

25/09/2013: Un modificador de hosts sencillo evita la detección de los
antivirus
    http://www.hispasec.com/unaaldia/5450

25/09/2012: Ataques a las centralitas de voz de bancos a través de los
tonos telefónicos
    http://www.hispasec.com/unaaldia/5085

25/09/2011: Elevación de privilegios a través de NetworkManager en Red Hat
Enterprise Linux
    http://www.hispasec.com/unaaldia/4719

25/09/2010: Denegación de servicio en Cisco Unified Communications Manager
    http://www.hispasec.com/unaaldia/4354

25/09/2009: Salto de restricciones a través de Samba en Sun Solaris
    http://www.hispasec.com/unaaldia/3989

25/09/2008: Vulnerabilidades en Symantec Veritas NetBackup 5.x y 6.x
    http://www.hispasec.com/unaaldia/3624

25/09/2007: Denegación de servicio a través de ptrace en Linux Kernel 2.6.x
    http://www.hispasec.com/unaaldia/3258

25/09/2006: Parche no oficial para la vulnerabilidad VML
    http://www.hispasec.com/unaaldia/2893

25/09/2005: Desbordamiento de búfer en Veritas Storage Exec y StorageCentral
    http://www.hispasec.com/unaaldia/2528

25/09/2004: Nuevo caso de 'phishing' a clientes de Banesto
    http://www.hispasec.com/unaaldia/2163

25/09/2003: Nueva actualización de Portable OpenSSH
    http://www.hispasec.com/unaaldia/1796

25/09/2002: Vulnerabilidad de seguridad en Mozilla y proyectos derivados
    http://www.hispasec.com/unaaldia/1431

25/09/2001: Ataque de denegación de servicio sobre SQUID
    http://www.hispasec.com/unaaldia/1066

25/09/2000: La vulnerabilidad "locale" no afecta solo a sistemas LINUX
    http://www.hispasec.com/unaaldia/701

25/09/1999: Problemas de Eudora con el plug-in PGP
    http://www.hispasec.com/unaaldia/333


 -------------------------------------------------------------------
  Claves PGP en http://www.hispasec.com/directorio/hispasec
 -------------------------------------------------------------------
  Bajas:   mailto:[email protected]?subject=unsubscribe
  Altas:   mailto:[email protected]?subject=subscribe
 -------------------------------------------------------------------
  (c) 2014 Hispasec               http://www.hispasec.com/copyright
 -------------------------------------------------------------------

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)

iQEcBAEBAgAGBQJUJSmBAAoJEI/UizGiFA4PRjYIAI/vFZdeE1HVubC/3Nposa8S
NShCS2k2GvpL0BMr2tuc2blVJw7BTcxJQogdRsK4p0x+625v8XDYxPL79ET76ny3
N8foSoGf41x72Sh++9nVGE4/5b9/uVNsu6dUvp1nAHmcWK7935VepdYD1gnZhFm0
UfMOUMlm2wUKSot8FYaHUWR/6nwHQf2LXHWiYfBwm+9yuKPUVqaXBQXcIwDycI7I
suEl0hAfxmzoHW0VLOCXYYqU03ZwKo4Cy8bXZfa9CMbe0lCbxejHa8nRWwc0lcMM
t1jmMRaYvBycjT11TjWJxx6nN0v3IbvLO4afYfN3tLnM3JgefYAM9AabnsP5mRQ=
=N8l/
-----END PGP SIGNATURE-----
_______________________________________________
Lista de correo Linux-plug
Temática: Discusión general sobre Linux
Peruvian Linux User Group (http://www.linux.org.pe)

Participa suscribiéndote y escribiendo a:  [email protected]
Para darte de alta, de baja  o hacer ajustes a tu suscripción visita:
http://voip2.voip.net.pe/mailman/listinfo/linux-plug

IMPORTANTE: Reglas y recomendaciones
http://www.linux.org.pe/listas/reglas.php
http://www.linux.org.pe/listas/comportamiento.php
http://www.linux.org.pe/listas/recomendaciones.php

Alojamiento de listas cortesia de http://cipher.pe

Responder a