ShellShock: atualização do Bash

Apresento a seguir o procedimento de atualização do Bash com a finalidade de remover a vulnerabilidade conhecida como shellshock.

Este procedimento foi testado nas versões 5, 6 e 7 do Debian, mas deve funcionar sem problemas nas demais versões e distribuições Linux.

O importante é o seguinte: sempre dê preferência pela atualização dos softwares de sua distribuição Linux utilizando os pacotes disponíveis no repositório da distribuição. O procedimento a seguir é manual, isto é, não utiliza os pacotes oficiais da distribuição. Quando isto é executado, as atualizações do referido software (ou pacote) não mais serão efetuadas pelo seu gerenciador de pacotes o que significa, no final das contas, que todas as atualizações deverão ser realizadas manualmente.

Outra informação importante: como a atualização é manual e a partir do código fonte, ela deve funcionar em todas as distribuições, mas podem ser necessários alguns ajustes. Portanto, execute o procedimento a seguir por sua conta e risco, preferencialmente num ambiente controlado antes de aplicá-lo a servidores de produção.

Como root, crie um diretório de trabalho:

mkdir lixo
cd lixo

Agora, crie um diretório para armazenar e compilar os Bash:

mkdir bash
cd bash

Baixe a última versão do Bash e os respectivos patches:

wget -c http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz

# Baixar pacthes
for x in $(seq -f "%03g" 0 27) ; do
    wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$x;
done

Agora vamos descompactar o código fonte do Bash, aplicar os patches, configurar e compilar:

tar xzvf bash-4.3.tar.gz
cd bash-4.3

# Aplicação dos patches
for x in $(seq -f "%03g" 0 27) ; do patch -p0 < ../bash43-$x ; done

# Configurar, compilar e instalar
./configure
make

# Install
make install

Agora vamos ativar o uso do Bash: faça uma cópia de segurança do Bash atual para o caso de ocorrerem problemas, e crie um link para o novo Bash:

cd /bin
mv bash bash.OLD

ln -sf /usr/local/bin/bash /bin/bash

Antes de fechar seu console de acesso, acesse o sistema através de um outro console (ALT-F2 por exemplo, se você estiver trabalhando diretamente no computador), ou acesse-o via rede (SSH) e teste se o novo Bash funcionou:

mario@xkzy4 ~$ bash --version
GNU bash, version 4.3.27(1)-release (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Veja a versão do Bash (4.3.27). Agora, verifique se a falha foi corrigida:

mario@xkzy4 ~$ env X="() { :;} ; echo shellshock" bash -c "echo completed"
completed

Se algo der errado, restaure o Bash anterior até que você tenha encontrado a causa do problema.

Fui.