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:
- Se utilizan parámetros de línea de comandos para configurar el demonio de Python
- Hay parámetros de configuración opcionales que no se utilizan
- 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.
Sobre el autor

Artículos relacionados del blog
Ú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
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
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
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 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 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.