BLOG | NGINX

Usando NGINX e NGINX Plus para proteger contra CVE-2015-1635

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Owen Garrett
Owen Garrett
Publicado em 16 de abril de 2015

Em 14 de abril, a Microsoft emitiu um alerta de vulnerabilidade – agora rastreado como CVE-2015-1635 – sobre um problema que pode permitir a execução remota de código se um invasor enviar uma solicitação HTTP especialmente criada para um sistema Windows afetado. Se corrigir seus servidores Windows de produção imediatamente não for uma opção, o NGINX e o NGINX Plus podem ajudar a protegê-lo contra ataques.

Os detalhes específicos da vulnerabilidade não foram divulgados até o momento, mas os invasores estão supostamente tentando encontrar sistemas vulneráveis enviando solicitações HTTP com solicitações de intervalo muito grandes, o que pode desencadear um estouro de buffer e causar uma falha no sistema Windows.

É altamente recomendável que os usuários apliquem o patch da Microsoft para corrigir essa vulnerabilidade. No entanto, se você não conseguir aplicar o patch a todos os seus sistemas de produção e estiver usando o NGINX ou o NGINX Plus para balancear a carga ou fazer proxy do tráfego para eles, uma simples alteração de configuração será suficiente para interceptar e corrigir as solicitações especiais enviadas aos sistemas vulneráveis.

Identificação e tratamento do tráfego de reconhecimento

Mattias Geniar analisou o tráfego de ataque e relata que solicitações HTTP com um grande intervalo de bytes no cabeçalho Range acionam a falha:

OBTER / HTTP/1.1rnHost: stuffrn
Intervalo: bytes=0-18446744073709551615rn
rn

A solução mais simples é usar a diretiva proxy_set_header para definir o cabeçalho Range como "" (a string vazia), o que efetivamente exclui o cabeçalho antes que a solicitação HTTP seja encaminhada ao servidor Windows nomeado pela diretiva proxy_pass :

servidor { ouvir 80;

localização / {
proxy_set_header Intervalo "";
proxy_pass http://windowsserver:80;
}
}

Se seu aplicativo exigir suporte a intervalo de bytes, você pode usar a diretiva map para substituir qualquer string que se assemelhe a um inteiro grande pela string vazia, antes de usar a diretiva proxy_set_header para definir o cabeçalho Range :

map $http_range $saferange { "~d{10,}" ""; # se corresponder a uma sequência de 10 ou mais inteiros, remova-o
default $http_range;
}

server {
listen 80;

location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}

Alternativamente, você pode retornar o código HTTP444 quando o valor no cabeçalho Range se assemelha a um inteiro grande. Código444 instrui o NGINX e o NGINX Plus a fechar a conexão do cliente imediatamente sem retornar nada.

servidor { ouvir 80;

se ($http_range ~ "d{9,}") {
retornar 444;
}

localização / {
proxy_pass http://windowsserver:80;
}
}

Mantenha-se seguro e aplique o patch, mas se não puder fazer isso imediatamente, o NGINX e o NGINX Plus podem ajudar a fechar o potencial buraco.

Para experimentar o NGINX Plus, comece hoje mesmo seu teste gratuito de 30 dias ou entre em contato conosco para uma demonstração.


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."