Correção de vulnerabilidades de segurança na implementação de referência LDAP do NGINX

NGINX | 11 de abril de 2022

Em 9 de abril de 2022, vulnerabilidades de segurança na implementação de referência do NGINX LDAP foram divulgadas publicamente. Determinamos que apenas a implementação de referência foi afetada. NGINX Open Source e NGINX Plus não foram afetados, e nenhuma ação corretiva será necessária se você não usar a implementação de referência.

A implementação de referência de LDAP do NGINX usa o Lightweight Directory Access Protocol (LDAP) para autenticar usuários de aplicações que passam por proxy do NGINX. Ela é publicada como um daemon Python e uma configuração relacionada do NGINX em https://github.com/nginxinc/nginx-ldap-auth, e sua finalidade e configuração são descritas em detalhes em nosso blog.

As implantações da implementação de referência de LDAP são afetadas pelas vulnerabilidades caso qualquer uma das condições a seguir se aplique. Abaixo, discutimos essas condições em mais detalhes e explicamos como mitigá-las:

  1. Parâmetros de linha de comando são usados para configurar o daemon Python
  2. Há parâmetros de configuração opcionais que não são utilizados
  3. A autenticação LDAP depende da associação a um grupo específico

Observação: A implementação de referência do LDAP é publicada como uma implementação de referência e descreve o funcionamento da integração e todos os componentes necessários para verificá-la. Ela não é uma solução LDAP pronta para uso em produção. Por exemplo, o nome de usuário e a senha usados na página de login de exemplo não são criptografados, e os avisos de segurança destacam esse fato.

Condição de mitigação 1: parâmetros de linha de comando são usados para configurar o daemon Python

A principal maneira de configurar a implementação de referência do LDAP é por meio de várias diretivas proxy_set_header, conforme detalhado na configuração de exemplo e na documentação. No entanto, os parâmetros de configuração também podem ser definidos na linha de comando que inicializa o daemon Python (nginx-ldap-auth-daemon.py).

Quando os parâmetros de configuração são especificados na linha de comando, um invasor pode substituir alguns ou todos eles enviando cabeçalhos de solicitação HTTP especialmente elaborados. Para evitar isso, certifique-se de que todos os cabeçalhos de solicitação desnecessários sejam ignorados durante a autenticação adicionando a seguinte configuração ao bloco location = /auth-proxy na configuração do NGINX (nginx-ldap-auth.conf no repositório).

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

Condição de mitigação 2: parâmetros de configuração opcionais não utilizados

Assim como na Condição 1, um invasor pode enviar cabeçalhos de solicitação HTTP especialmente elaborados para substituir determinados parâmetros de configuração, caso eles não tenham sido definidos na configuração. Por exemplo, o modelo de pesquisa LDAP pode ser substituído se não estiver explicitamente definido na configuração. A proteção é feita da mesma forma que na Condição 1, adicionando a seguinte configuração ao bloco location = /auth-proxy na configuração do NGINX.

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

Condição de mitigação 3: é necessário pertencer a um grupo LDAP

O daemon Python não sanitiza suas entradas. Consequentemente, um invasor pode usar um cabeçalho de solicitação especialmente elaborado para contornar a verificação de associação a grupos (memberOf) e, assim, forçar a autenticação LDAP a ser bem-sucedida, mesmo que o usuário que está sendo autenticado não pertença aos grupos exigidos.

Para mitigar esse problema, certifique-se de que o daemon de backend que apresenta o formulário de login remova todos os caracteres especiais do campo de nome de usuário. Em particular, ele deve remover os caracteres de abertura e fechamento de parênteses – ( ) – e o sinal de igual (=), pois todos eles têm um significado especial para os servidores LDAP. O daemon de backend da implementação de referência do LDAP será atualizado dessa forma oportunamente.

Agradecimentos

Agradecemos a Lucas Verney, valodzka e @_Blue_hornet por chamarem a atenção para essas vulnerabilidades de segurança.


Compartilhar

Sobre o autor

Liam Crilly
Liam CrillyDiretor Sênior de Gestão de Produtos

Mais publicações de Liam Crilly

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.