viernes, 26 de septiembre de 2014

Arreglar en Ubuntu el exploit del bash "Shell Shock"

Todos los Linux, al igual que en otros sistemas derivados de Unix (OS X también, como comentamos en un post previo), están afectados por el exploit "Shell Shock". En todos los sistemas conviene actualizarlo a la versión siguiente que ya no sea vulnerable.

Nuestro sistema será vulnerable si al ejecutar lo siguiente en una ventana de terminal:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

nos muestra el mensaje:
vulnerable
this is a test


En ese caso, merece la pena que lo arreglemos.

Para ello tenemos que bajar los fuentes del bash, aplicarle un parche de seguridad, compilarlo, e instalarlo.

Para ello, debemos tener el gcc instalado en la máquina, lanzar un terminal y ejecutar las siguientes órdenes (directamente se puede hacer copy&paste sobre el terminal):

cd
mkdir src
cd src
 # descargamos los fuentes del bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
 # descargamos los parches
for i in $(seq -f "%03g" 0 25); do wget     http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
 # aplicamos los parches
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
 # compilamos e instalamos
./configure && make
sudo make install
 # limpiamos
cd ..
cd ..
rm -r src

Una vez actualizado, si volvemos a ejecutar el script:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

nos debería devolver el mensaje:
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test


Y eso significará que nuestro sistema ya no es vulnerable al exploit  ;)

Arreglar en OS X el exploit del bash "Shell Shock"

Dado que el bash 3.2 (la versión que viene con OSX) es vulnerable al exploit llamado "Shell Shock" (CVE-2014-6271 y CVE-2014-7169), conviene actualizarlo a la versión siguiente (mientras Apple crea una actualización y se nos instala a través del App Store.

Nuestro sistema será vulnerable si al ejecutar lo siguiente en una ventana de terminal:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

nos muestra el mensaje:
vulnerable
this is a test


En ese caso, merece la pena que lo arreglemos.

Para ello tenemos que bajar los fuentes del bash desde la página de Apple, aplicarle un parche de seguridad, compilarlo, y sustituir los ejecutables del bash y sh en /bin

Para ello, debemos tener el XCode instalado en la máquina, lanzar un terminal y ejecutar las siguientes órdenes (directamente se puede hacer copy&paste sobre el terminal):

cd
mkdir bash-fix
cd bash-fix
curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
cd bash-92/bash-3.2
curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0    
cd ..

xcodebuild

sudo cp /bin/bash /bin/bash.old
sudo cp /bin/sh /bin/sh.old

build/Release/bash --version
build/Release/sh --version

sudo cp build/Release/bash /bin
sudo cp build/Release/sh /bin

sudo chmod a-x /bin/bash.old /bin/sh.old



Si ahora volvemos a ejecutar el script:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

nos debería devolver el mensaje:
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test


Y eso significará que nuestro sistema ya no es vulnerable al exploit  ;)