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.
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."