Parche para corregir shellshock en bash

Es por todos conocido -o, al menos, eso quisiera creer- el bug Shellshock [EN] que afecta las versiones de bash… bueno, básicamente, todas las versiones de bash hasta la 4.3.25.

Ahora, ¿En qué consiste la falla? Pues, que se pueden bypassear variables y ejecutar código arbitrariamente. Es decir, que cualquiera podría inyectar código en tu shell y hacer cosas muy, muy malas.

Un ejemplo del bug corriendo.

root@orchid:/home/manuel# env x='() { :;}; echo ola qe ase' bash -c "echo shellshock o qe ase"
ola qe ase
shellshock o qe ase

Este ejemplo inocente y sencillo constituye una prueba de concepto. Es decir, en ese momento mi versión de bash era vulnerable.

Es innecesario mencionar lo peligroso de este bug, y de las terribles implicaciones de éste. Me atrevería a decir que es más relevante y peligroso que Heartbleed [EN], aquel conocido bug de OpenSSL que hizo correr a más de un sysadmin.

Pues bien… revisando posibles arreglos a la situación, doy con este hilo de superuser [EN] donde proponen una solución. Puedo decir que a mí me funcionó en ElementaryOS (basado en ubuntu 12).

Y, para llevarlo al punto de la ironía, lo haremos con un bash script:

#!/bin/bash
mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
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
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done ./configure --prefix=/ && make && make install cd .. cd .. rm -r src

¿Qué hace este script? Descarga la versión 4.3 de bash, aplica parches y actualiza la versión. Nada realmente complicado.

Una vez aplicado el parche, volvemos a intentar ejecutar el código de prueba

root@orchid:/home/manuel# env x='() { :;}; echo ola qe ase' bash -c "echo shellshock o qe ase"
bash: aviso: x: ignoring function definition attempt
bash: error al importar la definición de la función para `x'
shellshock o qe ase

¿Y eso qué quiere decir? Pues, esas dos primeras líneas de la salida significan que no se puede importar una variable. Como lo otro es un simple echo, éste se muestra sin problemas.

Happy patching and hacking.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *