¿Qué es la vulnerabilidad de bash CVE-2014-6271 (Shellshock) y cómo lo soluciono?

141

Recientemente, ha habido noticias sobre "CVE-2014-6271" (ver USN-2362-1 ), que es una vulnerabilidad en Bash. ¿Cómo sé si esto me afecta, cómo puedo solucionarlo y por qué debería importarme?

Esto está diseñado como una respuesta canónica para esta vulnerabilidad, debido a su alcance y gravedad.

ζ--
fuente
18
"¿Cómo lo arreglo?" -> ¡ solo ejecuta tu administrador de actualizaciones! Realmente, Ubuntu lanza actualizaciones de seguridad, hay un equipo de seguridad dedicado. ¡No publique respuestas sobre la creación de Bash desde la fuente! ; Es innecesariamente complicado y más difícil mantener su sistema en el futuro.
gertvdijk
55
Además, también el CVE adicional para la solución incompleta. CVE-2014-7169
gertvdijk
18
Por favor, hacer postales respuestas sobre la construcción de la fuente. Ya sea que deberían o no, algunas personas tienen servidores Ubuntu antiguos, y construir desde la fuente puede ser su única opción.
GaryO
3
Ups, lo siento, me acabo de dar cuenta de que puse bash en lugar de dash en la prueba. No importa, está bien.
Matt H
44
Leer: oss-sec: Re: CVE-2014-6271: ejecución remota de código a través de bash . Bash bug todavía no se ha solucionado
blade19899

Respuestas:

126

¿Qué es bash?

Bash es el shell interactivo predeterminado en Ubuntu. Cuando está interactuando con el terminal (ya sea a través del emulador de terminal, a través de un tty o ssh), generalmente está escribiendo comandos que bashleerán y ejecutarán. Incluso si no usa el terminal en absoluto, todavía tiene Bash.

En Ubuntu, /bin/shno es bash (es guión). Solo bash se ve afectado por esta vulnerabilidad.

¿Cómo me afecta el exploit?

Bash y el sistema operativo realizan un seguimiento de un conjunto de variables de entorno que describen el usuario conectado actualmente, dónde buscar programas en el disco duro y otras funciones similares. Al crear una variable de entorno con una estructura específica, un atacante podría ejecutar código la próxima vez que comience Bash.

El atacante puede establecer esa variable de entorno de varias maneras:

  • Conéctese de forma remota a un servicio como SSH con una configuración específica como git sobre ssh. Como Mitre advierte, el uso de la ForceCommandopción sshd es un vector de ataque. Las cuentas cuyo shell no es bash no se ven afectadas.
  • Te está engañando para que establezcas la variable de entorno.
  • Hacer que otro programa establezca una variable de entorno para tener ese valor creado. Por ejemplo, es posible que tenga un servidor web y un script que necesite establecer una variable de entorno con contenido de usuario específico. Incluso si ese script crea el suyo y no toca otras variables de entorno, es suficiente. Una sola variable de entorno con cualquier nombre y un valor diseñado es suficiente para que el exploit tenga éxito .
  • Otras formas que no he mencionado aquí.

Una vez que establezcan esta variable, la próxima vez que se bashabra por cualquier motivo, se ejecutará el código de su atacante. Esto es especialmente temible sudo -s, ya que genera bash como el superusuario (una regla de usuario administrativo que tiene control total sobre los datos y programas de su computadora). Incluso si solo comienza bash como usuario estándar, los archivos de ese usuario se pueden eliminar.

Es importante tener en cuenta que incluso si no utiliza bash usted mismo, muchos programas generarán bash por sí mismos como parte de su operación. Incluso en este caso, eres vulnerable. Sin embargo, Ubuntu /bin/shno es bash, por lo que solo se ven afectados los programas que invocan explícitamente bash y no el shell de secuencias de comandos predeterminado.

Según Mitre:

vectores que involucran la función ForceCommand en OpenSSH sshd, los módulos mod_cgi y mod_cgid en el Servidor Apache HTTP, scripts ejecutados por clientes DHCP no especificados y otras situaciones en las que la configuración del entorno ocurre a través de un límite de privilegios desde la ejecución de Bash.

¿Soy vulnerable?

Use dpkg para verificar la versión de su paquete instalado:

dpkg -s bash | grep Version

Esto buscará información en su bashpaquete y filtrará la salida para mostrarle solo la versión. Las versiones fijos son 4.3-7ubuntu1.4, 4.2-2ubuntu2.5, y 4.1-2ubuntu3.4.

Por ejemplo, veo:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

y puedo determinar que no soy vulnerable.

¿Cómo actualizo?

El administrador de actualizaciones estándar le ofrecerá esta actualización. Este es un excelente ejemplo de cómo las actualizaciones de seguridad son importantes, sin importar qué sistema operativo use o qué tan bien mantenido esté.

El Boletín de USN establece que se han lanzado nuevas versiones para Ubuntu 14.04 Trusty Tahr, 12.04 Precise Pangolin y 10.04 Lucid Lynx. Si no está en una de estas versiones LTS, pero está en una versión razonablemente reciente, lo más probable es que pueda encontrar un paquete parcheado.

Primero, verifica si

Si es vulnerable, primero debe tomar las listas de paquetes más recientes:

sudo apt-get update && sudo apt-get install bash

El primer comando se asegura de que tiene la lista de paquetes más reciente que incluye la versión fija, y el segundo comando instala la versión más nueva (fija) de bash.

Si bien el error solo parece entrar en juego cuando se genera bash, sigue siendo una buena idea reiniciar de inmediato si es posible.

ζ--
fuente
20
Lo siento, eres vulnerable . El parche original no soluciona todo el problema. Consulte cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA, actualmente no hay una solución disponible públicamente. Ver, por ejemplo, people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil
44
@hexafraction ¿Dónde lees que 12.10 recibe una actualización para esto? No lo creo, 12.10, 13.04, 13.10 son mucho ¡Fin de vida ! Y también, los repositorios de backport no se usan para actualizaciones de seguridad .
gertvdijk
2
@hexafraction ¡No, no lo hacen! Ese es el punto de ser el fin de la vida: ya no hay apoyo.
gertvdijk
1
@ MichaelHärtl Si está en Ubuntu 12.10, puede descargar la versión 12.04 de bash desde packages.ubuntu.com/precise/bash e instalarlo manualmente.
David
2
La solución para CVE-2014-7169 está disponible en el administrador de actualizaciones (para mí).
Calmarius
27

Robó esto de cft en Hacker News . Si tiene problemas con sus repositorios como yo (Odroid-XU), entonces esto debería funcionar bien si desea parchear / construir desde la fuente.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

Entonces corre:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Y si obtienes:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

¡Entonces estás todo bien!


ADVERTENCIA: ¡ make install instalará bash in /usr/local/bin, por /bin/bashlo que no se modifica y se puede invocar desde curl!

Bobby Saget
fuente
1
Aquí se explica cómo compilar bash 3.2 con el parche en Debian Lenny: gist.github.com/mattwhite/86de50d30134129e44ef
Matt White el
13
-1. No es necesario construir desde la fuente. Ubuntu tiene un parche de seguridad en los repositorios. Si tiene "problemas con su repositorio", corríjalo. ¡Probablemente sea vulnerable de muchas maneras más si no recibe actualizaciones de seguridad!
gertvdijk
1
@ Matt White ¡Gracias! Me acabas de salvar un par de horas :)
Florian Fida
55
@FlorianFida ¡Esto es AskUbuntu! Se espera que todos en este sitio publiquen respuestas en el ámbito del uso de Ubuntu.
gertvdijk
66
@ MichaelHärtl 12.10 es el fin de la vida. Ya no recibe ninguna actualización de seguridad desde hace mucho tiempo. ¡¡¡Mejorar!!!
gertvdijk
9

Nota: El parche de seguridad para CVE-2014-7169 se lanzó como una actualización de seguridad estándar. No es necesario agregar ppa adicionales para recibir este parche. Solo se necesita lo siguiente.

sudo apt-get update

sudo apt-get upgrade

Para asegurarse de que ha parcheado bash correctamente, ejecute el siguiente comando

dpkg -s bash | grep Version

Si tiene 14.04 LTS, debería ver una salida de:

Version: 4.3-7ubuntu1.4

Si está en 12.04 LTS, su salida debería ser:

 Version: 4.2-2ubuntu2.5
branch.lizard
fuente
1
Esto era correcto, pero ahora se ha puesto a disposición un parche oficial, por lo que se ha lanzado la actualización de seguridad. En consecuencia, estos pasos ya no son necesarios.
Robie Basak
Esto es correcto. Editaré la publicación anterior. Gracias.
branch.lizard
1

Si está en 11.04: use los pasos a continuación (funcionó para mí)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

si no se descarga el parche requerido, instale el paquete ftp

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

Para ver si se aplicó el parche:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
ldrrp
fuente
0

Estoy usando Natty 11.04, que es EOL (y he actualizado /etc/apt/sources.list para usar old-releases.ubuntu.com), así que tengo que construir desde la fuente. Quería construir un .deb, por lo que al menos el administrador de paquetes es "consciente" de que la versión bash no es la predeterminada. No tengo éxito al 100%, sin embargo, el paquete está registrado como "más nuevo" y el bashbinario termina arreglado, así que esto es lo que hice:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

Ahora, en el (sub) directorio bash-4.2/, hay: un archivo bash-4.2.tar.xz, que necesita ser desempaquetado para llegar a la bashfuente; y un subdirectorio llamado debian.

Hice los siguientes cambios para evitar dependencias de texlive: en bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... y en bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

Para cambiar la versión, en este bash-4.2/directorio, haga:

bash-4.2$ dch --local patchCVE

... y complete las notas en el registro de cambios cuando se le solicite. Esto asegurará que se llame al .deb (y los metadatos relacionados) (en mi caso) bash_4.2-0ubuntu3patchCVE1_i386.deb.

Entonces puedes intentar construir con dpkg-buildpackage -us -uco debuildcomando. Nota: cualquiera de estos volverá a desempaquetar la fuente del archivo zip, anulando cualquier parche que haya tenido. Aún así, ejecute uno de estos una vez para que la fuente se desempaque y debuildcompile (la nota puede fallar al final debido a texlive, pero debe desempaquetar y compilar la fuente).

Luego, aplique los parches; tenga en cuenta que debe usar -p1aquí, porque actualmente está en el bash-4.2/directorio:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

Luego reconstruya la versión parcheada ejecutando:

bash-4.2$ fakeroot debian/rules build 

Esto reconstruiría el ejecutable; para probarlo:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

Para compilar los archivos .deb, ejecute:

bash-4.2$ fakeroot debian/rules binary

Esto guardará los archivos .deb en el directorio principal; para enumerar sus contenidos:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Para instalar el .deb:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Sin embargo, por alguna razón, este .deb contiene un binario no parcheado (?!), Así que tuve que hacer además:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... y después de eso, la prueba comenzó a pasarme correctamente:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test
sdaau
fuente
Pregunta: La pregunta original establece 1 posible vector de ataque como "scripts ejecutados por clientes DHCP no especificados". ¿Qué significa esto? ¿Esto significa que Ubuntu / sbin / dhclient <- es vulnerable?
Bran
Creo que tal vez los clientes no especificados significan que Ubuntu tiene un / sbin / dhclient infectado, que luego ejecuta comandos que conducen al script bash que inicia el shellshock. ¿Es eso lo que los clientes DHCP son vulnerables al shellshock? (Espero que tenga sentido, vea mi mensaje anterior del 10 de octubre)
Bran