25 August/2011

Falha de segurança no serviço httpd/Apache

O CERT.Bahia gostaria de alertar a todos sobre uma importante falha de segurança no serviço httpd/Apache, vulnerabilidade essa que facilita ataques de negação de serviço (DoS - Denial of Service) com até mesmo um baixo número de máquinas.

Sistemas afetados

Esta vulnerabilidade afeta todas as versões do Apache. (Anteriores a versão 2.2.20)

Descrição

Foi descoberta uma falha que permite múltiplas requisições sobrepostas do campo range no cabeçalho das requisições HTTP para o serviço Apache. Dessa forma o serviço consome alto nível de CPU e memória, o que leva o servidor a não disponibilizar mais recurso para outras atividades, assim negando o serviço do ativo em questão.

Impacto

Esta vulnerabilidade pode ser explorada remotamente, onde o atacante executa um script já disponível na internet, e especifica qual o ip do “alvo”, assim tornando o serviço inoperante em alguns instantes.

Correções disponíveis

A equipe de desenvolvedores do Apache já informou que irá resolver o problema em até 48 horas. Sendo assim atualizar o se ambiente no momento que o patch disponível é aconselhável.

Enquanto não é disponibilizada uma atualização, segue abaixo algumas medidas que servirão para mitigar os riscos de ataque:

A equipe de desenvolvedores do Apache lançou uma nova versão com a correção do problema. Atualize seu apache para versão informada para resolver o problema informado.

Medidas de contorno

Utilize o SetEnvIf ou mod_rewrite para detectar o alto número de requisições com campo range possivelmente comprometidas e então ignorá-las.

Opção 1: (Apache 2.0 e 2.2)

# Ignorar requisições com campo range quando maiores que 5.
# CVE-2011-3192
SetEnvIf Range (,.*?){5,} bad-range=1
RequestHeader unset Range env=bad-range

# log opcional.
CustomLog logs/range-CVE-2011-3192.log common env=bad-range

Opção 2: (Apache 1.3)

# Ignorar requisições com campo range quando maiores que 5.
# CVE-2011-3192
RewriteEngine on
RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$)
RewriteRule .* - [F]

Esse número 5 foi escolhido para um caso padrão, mas em alguns casos, esse número pode ser maior. Consulte o manual do Apache para verificar qual valor exato para seu caso.

Limite o tamanho dos campos de requisição para alguns bytes.

LimitRequestFieldSize 200

Referências