Mind Bending

Um bug descoberto no Bash está causando uma grande preocupação para especialistas de segurança para a Internet.

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.

Shellshock

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:

Respostas Shellschok

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

Magnun

Magnun

Engenheiro de telecomunicações por formação, mas trabalha com suporte à infraestrutura GNU/Linux, e nas horas vagas é Programador OpenSource (Python e C) desenhista e escritor do Mind Bending Blog.


Comments

comments powered by Disqus