Vulnerabilidades de Configuração Incorreta em Proxies Reversos: Um Guia Completo#
Introdução#
Proxies reversos são um componente crucial nas arquiteturas web modernas, gerenciando solicitações entre clientes e servidores backend. Eles oferecem várias funcionalidades, como balanceamento de carga, cache e terminação de SSL. No entanto, configurações incorretas em proxies reversos podem introduzir sérias vulnerabilidades de segurança, particularmente no que diz respeito a cabeçalhos como X-Forwarded-For
e X-Real-IP
.
Esses cabeçalhos são usados para passar endereços IP dos clientes através de várias camadas de proxies. O gerenciamento e validação adequados desses cabeçalhos são essenciais para garantir a identificação precisa dos clientes e manter a segurança.
Aqui está um diagrama de fluxo simples que ilustra como os usuários interagem com um proxy reverso e depois com uma aplicação:
Neste fluxo, o Proxy Reverso
lida com solicitações recebidas dos Usuários
e as encaminha para o App
. O gerenciamento adequado dos cabeçalhos como X-Forwarded-For
e X-Real-IP
é essencial para garantir que o App
receba informações precisas sobre os clientes e mantenha a segurança.
Como os Proxies Reversos Lidam com os Cabeçalhos de Segurança#
Os proxies reversos desempenham um papel crítico na gestão e encaminhamento das solicitações dos clientes para os servidores backend. Um aspecto fundamental de sua operação envolve o manuseio de cabeçalhos como X-Forwarded-For
e X-Real-IP
. Entender como diferentes proxies reversos gerenciam esses cabeçalhos é fundamental para garantir uma identificação segura e precisa dos clientes.
Práticas Gerais em Proxies Reversos:
Não Confiar em Cabeçalhos de Entrada por Padrão:
- Consideração de Segurança: Proxies reversos normalmente não confiam diretamente em cabeçalhos como
X-Forwarded-For
ouX-Real-IP
vindos do cliente. Isso porque esses cabeçalhos podem ser manipulados por atacantes para falsificar endereços IP ou outras informações do cliente. - Ação Tomada: Em vez disso, os proxies reversos frequentemente usam mecanismos e configurações internas para lidar com esses cabeçalhos de forma segura.
- Consideração de Segurança: Proxies reversos normalmente não confiam diretamente em cabeçalhos como
Reescrever Cabeçalhos com Base em Informações Internas:
- Manuseio de Endereços Internos: Proxies reversos frequentemente reescrevem ou atualizam cabeçalhos com base em seu conhecimento interno. Por exemplo, o
remote_addr
(o endereço IP do cliente como visto pelo proxy) pode ser usado para definir ou atualizar oX-Forwarded-For
. - Configuração: Isso garante que os cabeçalhos passados para os servidores backend sejam baseados em dados internos confiáveis em vez de cabeçalhos fornecidos pelo cliente.
- Manuseio de Endereços Internos: Proxies reversos frequentemente reescrevem ou atualizam cabeçalhos com base em seu conhecimento interno. Por exemplo, o
Exemplos de Manuseio de Cabeçalhos em Vários Proxies Reversos:
NGINX:
- O NGINX usa o
ngx_http_realip_module
para lidar com cabeçalhos. Pode ser configurado para confiar em IPs específicos e garantir o manuseio correto dos cabeçalhos. - Exemplo de Configuração:
http { set_real_ip_from 192.168.1.0/24; # IPs de proxy confiáveis real_ip_header X-Forwarded-For; }
- O NGINX usa o
Apache:
- O Apache usa o módulo
mod_remoteip
para substituir o endereço IP do cliente pelo fornecido no cabeçalhoX-Forwarded-For
, se o proxy for confiável. - Exemplo de Configuração:
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 192.168.1.0/24
- O Apache usa o módulo
Kong:
- O Kong lida com esses cabeçalhos através de seus plugins e configurações. Pode ser configurado para gerenciar IPs de clientes e outros cabeçalhos de forma segura com base no processamento interno.
Apigee:
- O Apigee processa cabeçalhos como parte de suas políticas de gerenciamento de API. É configurado para garantir que os cabeçalhos usados para controle de acesso e registro sejam processados de forma segura e precisa.
Balanceadores de Carga:
- Balanceadores de carga podem lidar com esses cabeçalhos de forma diferente dependendo de suas configurações. Eles frequentemente configuram faixas de IP confiáveis e garantem que os cabeçalhos sejam corretamente gerenciados para evitar vulnerabilidades.
Ao não confiar diretamente em cabeçalhos fornecidos pelo usuário e usar mecanismos internos para gerenciar esses cabeçalhos, os proxies reversos ajudam a manter informações precisas e seguras sobre os clientes.
Configurações Incorretas Comuns e Seus Impactos#
Configurações incorretas relacionadas aos cabeçalhos X-Forwarded-For
e X-Real-IP
podem levar a sérios problemas de segurança:
Confiança Excessiva em Cabeçalhos:
- Se um proxy reverso estiver configurado para confiar em todos os cabeçalhos de entrada sem validação adequada, atacantes podem manipular esses cabeçalhos para falsificar endereços IP. Isso pode levar a limitações de taxa ou controle de acesso incorretos baseados em IP.
Configurações de Confiança Incorretas:
- Em cenários com múltiplos proxies, como em ambientes em nuvem, cada proxy deve ser configurado corretamente para encaminhar cabeçalhos. Configurações incorretas podem resultar na recepção de um IP de cliente incorreto ou na exposição de dados sensíveis.
Exemplo do Mundo Real:
Em uma infraestrutura complexa com um balanceador de carga do GCP, balanceador de carga interno, proxy reverso interno e uma aplicação final, uma configuração incorreta do cabeçalho X-Real-IP
levou a uma vulnerabilidade. Desenvolvedores assumiram que o cabeçalho X-Real-IP
do último proxy reverso era o verdadeiro IP do cliente. Na realidade, era o IP do último proxy, fazendo com que todos os usuários parecessem vir do mesmo IP. Essa configuração incorreta afetou aplicações que dependiam do rastreamento de comportamento baseado em IP.
Aqui está um diagrama MermaidJS ilustrando esse cenário:
Estratégias de Prevenção#
Para evitar configurações incorretas, considere as seguintes estratégias:
Documentar a Infraestrutura: Garanta que toda a infraestrutura de proxy reverso esteja bem documentada e compartilhada com os desenvolvedores. Esta documentação deve incluir como os cabeçalhos são tratados em cada camada e quaisquer configurações que afetam o processamento de cabeçalhos.
Configurar Proxies Confiáveis: Configure corretamente proxies confiáveis para garantir que os cabeçalhos sejam manuseados de forma correta. Utilize módulos ou configurações que evitem que cabeçalhos sejam facilmente falsificados ou manipulados.
Validação e Sanitização: Implemente validação e sanitização dos cabeçalhos recebidos para evitar aceitar dados potencialmente manipulados.
Exemplos de Configuração:
NGINX:
http { set_real_ip_from 192.168.1.0/24; # IPs de proxy confiáveis real_ip_header X-Forwarded-For; }
Apache:
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 192.168.1.0/24
Kong: Configure o plugin
ip-restriction
ou use configurações semelhantes para lidar com oX-Forwarded-For
de forma segura.
Tendências Emergentes: O Novo Cabeçalho Forwarded
#
O cabeçalho Forwarded
é um novo padrão que visa fornecer uma forma mais robusta e consistente de gerenciar informações do cliente através de proxies. Ele combina vários cabeçalhos de encaminhamento em um único formato de cabeçalho, reduzindo o risco de manipulação de cabeçalhos.
Exemplo:
Forwarded: for=192.0.2.60; proto=http; by=203.0.113.43
Claro, aqui está a conclusão e os links adicionados:
Conclusão#
Compreender e configurar corretamente proxies reversos é fundamental para manter a segurança de sua infraestrutura. O gerenciamento adequado de cabeçalhos como X-Forwarded-For
e X-Real-IP
ajuda a garantir uma identificação precisa dos clientes e evita vulnerabilidades. A documentação completa da infraestrutura, a configuração apropriada dos proxies confiáveis e a implementação de validação e sanitização dos cabeçalhos são práticas essenciais para evitar configurações incorretas.
À medida que novas práticas e padrões emergem, como o cabeçalho Forwarded
, é crucial manter-se atualizado e adaptar suas configurações para assegurar a robustez e a segurança da sua aplicação.