Cómo abordar las vulnerabilidades de seguridad en la implementación de referencia de LDAP para NGINX

NGINX | 11 de abril de 2022

El 9 de abril de 2022, se hicieron públicas varias vulnerabilidades de seguridad en la implementación de referencia de LDAP para NGINX. Hemos determinado que solo la implementación de referencia está afectada. NGINX Open Source y NGINX Plus no están afectados, y no es necesario tomar ninguna medida correctiva si no utiliza la implementación de referencia.

La implementación de referencia de LDAP de NGINX utiliza el protocolo ligero de acceso a directorios (LDAP) para autenticar a los usuarios de las aplicaciones que NGINX actúa como proxy. Se publica como un demonio de Python junto con la configuración de NGINX correspondiente en https://github.com/nginxinc/nginx-ldap-auth, y su finalidad y configuración se describen detalladamente en nuestro blog.

Las implementaciones de referencia de LDAP se ven afectadas por las vulnerabilidades si se cumple alguna de las siguientes condiciones. A continuación, analizamos estas condiciones con más detalle y explicamos cómo mitigarlas:

  1. Se utilizan parámetros de línea de comandos para configurar el demonio de Python
  2. Hay parámetros de configuración opcionales que no se utilizan
  3. La autenticación LDAP depende de la pertenencia a un grupo específico

Nota: La implementación de referencia de LDAP se publica como tal y describe el funcionamiento de la integración y todos los componentes necesarios para verificarla. No es una solución LDAP apta para entornos de producción. Por ejemplo, el nombre de usuario y la contraseña utilizados en la página de inicio de sesión de muestra no están cifrados, tal como se indica en los avisos de seguridad.

Condición atenuante 1: se utilizan parámetros de línea de comandos para configurar el demonio de Python

La forma principal de configurar la implementación de referencia de LDAP consiste en utilizar varias directivas proxy_set_header, tal como se detalla en la configuración de ejemplo y en la documentación. Sin embargo, los parámetros de configuración también se pueden establecer en la línea de comandos que inicia el demonio de Python (nginx-ldap-auth-daemon.py).

Cuando los parámetros de configuración se especifican en la línea de comandos, un atacante puede sobrescribir algunos o todos ellos enviando cabeceras de solicitud HTTP especialmente diseñadas. Para evitarlo, asegúrese de que se ignoren todas las cabeceras de solicitud innecesarias durante la autenticación. Para ello, añada la siguiente configuración al bloque location = /auth-proxy de la configuración de NGINX (nginx-ldap-auth.conf en el repositorio).

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

Mitigación de la condición 2: parámetros de configuración opcionales no utilizados

Al igual que en la condición 1, un atacante puede enviar cabeceras de solicitud HTTP especialmente diseñadas para sobrescribir determinados parámetros de configuración si estos no se han definido en la configuración. Por ejemplo, la plantilla de búsqueda LDAP podría sobrescribirse si no se ha definido explícitamente en la configuración. Esto se evita del mismo modo que en la condición 1: añadiendo la siguiente configuración al bloque location = /auth-proxy de la configuración de NGINX.

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

Condición atenuante 3: se requiere pertenecer a un grupo de LDAP

El demonio de Python no depura los datos de entrada. Por consiguiente, un atacante puede utilizar una cabecera de solicitud especialmente diseñada para eludir la comprobación de pertenencia a grupos (memberOf) y forzar así que la autenticación LDAP se complete correctamente, aunque el usuario que se está autenticando no pertenezca a los grupos requeridos.

Para mitigar este problema, asegúrese de que el demonio de backend que presenta el formulario de inicio de sesión elimine todos los caracteres especiales del campo de nombre de usuario. En particular, debe eliminar los paréntesis de apertura y cierre – ( ) – y el signo igual (=), ya que todos ellos tienen un significado especial para los servidores LDAP. El demonio de backend de la implementación de referencia de LDAP se actualizará de este modo próximamente.

Agradecimientos

Agradecemos a Lucas Verney, valodzka y @_Blue_hornet que nos hayan alertado sobre estas vulnerabilidades de seguridad.


Compartir
Etiquetas: F5 NGINX, News, Tech, 2022

Sobre el autor

Liam Crilly
Liam CrillyDirector sénior de Gestión de Producto

Más artículos de Liam Crilly

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.