BLOG | NGINX

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

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:

GET / HTTP/1.1rnHost: stuffrn
Range: 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 :

server {    listen 80;
 
    location / {
        proxy_set_header Range "";
        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,}" "";  # if it matches a string of 10 or more integers, remove it
    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.

server {    listen 80;
 
    if ($http_range ~ "d{9,}") {
        return 444;
    }
 
    location / {
        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."