Como usar o NGINX e o NGINX Plus para se proteger contra a CVE-2015-1635

NGINX | 16 de abril de 2015

Em 14 de abril, a Microsoft emitiu um alerta de vulnerabilidade — agora rastreada como CVE-2015-1635 — sobre uma falha que pode permitir a execução remota de código caso um invasor envie uma solicitação HTTP especialmente criada para um sistema Windows afetado. Se não for possível aplicar imediatamente a correção aos seus servidores Windows de produção, o NGINX e o NGINX Plus podem ajudar a protegê-los contra ataques.

Até o momento da redação deste texto, os detalhes específicos da vulnerabilidade ainda não haviam sido divulgados, mas há relatos de que invasores estão tentando encontrar sistemas vulneráveis enviando solicitações HTTP com intervalos (Range) muito grandes, o que pode provocar 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 não for possível aplicar o patch a todos os seus sistemas de produção e você estiver usando o NGINX ou o NGINX Plus para balancear a carga ou encaminhar o tráfego para eles por meio de proxy, uma simples alteração na 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 do ataque e relata que as solicitações HTTP com um intervalo de bytes amplo no cabeçalho Range provocam a falha:

GET / HTTP/1.1rnHost: stuffrn
Range: bytes=0-18446744073709551615rn
rn

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

server {    listen 80;
 
    location / {
        proxy_set_header Range "";
        proxy_pass http://windowsserver:80;
    }
}

Se o seu aplicativo precisar de suporte a intervalos de bytes, você poderá usar a diretiva map para substituir qualquer string que se pareça com um número inteiro grande por uma 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;
    }
}

Como alternativa, você pode retornar o código HTTP 444 quando o valor no cabeçalho Range se assemelhar a um número inteiro grande. O código 444 instrui o NGINX e o NGINX Plus a fechar imediatamente a conexão com o cliente sem retornar nada.

server {    listen 80;
 
    if ($http_range ~ "d{9,}") {
        return 444;
    }
 
    location / {
        proxy_pass http://windowsserver:80;
    }
}

Mantenha-se protegido e aplique a correção, mas, se não puder fazer isso imediatamente, o NGINX e o NGINX Plus podem ajudar a mitigar temporariamente essa possível vulnerabilidade.

Para experimentar o NGINX Plus, comece hoje mesmo sua avaliação gratuita de 30 dias ou entre em contato conosco para solicitar uma demonstração.


Compartilhar

Sobre o autor

Owen Garrett
Owen GarrettDiretor Sênior de Gestão de Produtos

Mais publicações de Owen Garrett

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.