BLOG | NGINX

Abordar las debilidades de seguridad en la implementación de referencia LDAP de NGINX

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Liam Crilly
Liam Crilly
Publicado el 11 de abril de 2022

El 9 de abril de 2022, se compartieron públicamente vulnerabilidades de seguridad en la implementación de referencia LDAP de NGINX . Hemos determinado que solo la implementación de referencia se ve afectada. NGINX Open Source y NGINX Plus no se ven afectados y no es necesario realizar ninguna acción correctiva si no utiliza la implementación de referencia.

La implementación de referencia LDAP de NGINX utiliza el Protocolo Ligero de Acceso a Directorios (LDAP) para autenticar a los usuarios de las aplicações que NGINX gestiona como proxy. Está publicada como un demonio de Python y su configuración relacionada con NGINX en https://github.com/nginxinc/nginx-ldap-auth . Su propósito y configuración se describen en detalle en nuestro blog .

Las implementaciones de la implementación de referencia LDAP se ven afectadas por las vulnerabilidades si se aplica alguna de las siguientes condiciones. A continuación analizamos más a fondo las condiciones y cómo mitigarlas:

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

Nota:  La implementación de referencia LDAP se publica como una implementación de referencia y describe la mecánica de cómo funciona la integración y todos los componentes necesarios para verificar la integración. No es una solución LDAP de nivel de producción. Por ejemplo, no hay cifrado del nombre de usuario y la contraseña utilizados para la página de inicio de sesión de muestra, y los avisos de seguridad lo indican.

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

La forma principal de configurar la implementación de referencia LDAP es con una serie de directivas proxy_set_header como se detalla en la configuración de muestra y la documentación . Sin embargo, los parámetros de configuración también se pueden establecer en la línea de comando que inicializa el demonio de Python ( nginx-ldap-auth-daemon.py ).

Cuando se especifican parámetros de configuración en la línea de comando, un atacante puede anular algunos o todos ellos pasando encabezados de solicitud HTTP especialmente diseñados. Para protegerse contra esto, asegúrese de que todos los encabezados de solicitud extraños se ignoren durante la autenticación agregando la siguiente configuración al bloque location = /auth-proxy en la configuración de NGINX ( nginx-ldap-auth.conf en el repositorio).

ubicación = /auth-proxy {
# ...
proxy_pass_request_headers desactivados;
proxy_set_header Autorización $http_authorization; # Si se usa autenticación básica
# ...
}

Condición atenuante 2: Parámetros de configuración opcionales no utilizados

Al igual que en la Condición 1, un atacante puede pasar encabezados de solicitud HTTP especialmente diseñados para anular ciertos parámetros de configuración, si no se establecieron en la configuración. Por ejemplo, la plantilla de búsqueda LDAP podría anularse si no se configura explícitamente en la configuración. Esto se defiende de la misma manera que la Condición 1, agregando la siguiente configuración al bloque location = /auth-proxy en la configuración de NGINX.

ubicación = /auth-proxy {
# ...
proxy_pass_request_headers desactivados;
proxy_set_header Autorización $http_authorization; # Si se usa autenticación básica
# ...
}

Condición atenuante 3: Se requiere membresía del grupo LDAP

El demonio Python no desinfecta sus entradas. En consecuencia, un atacante puede usar un encabezado de solicitud especialmente diseñado para eludir la verificación de membresía del grupo ( memberOf ) y así forzar que la autenticación LDAP tenga éxito incluso si el usuario que se está autenticando no pertenece a los grupos requeridos.

Para mitigar esto, asegúrese de que el demonio 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 caracteres de paréntesis de apertura y cierre – ( ) – y el signo igual ( = ), que tienen un significado especial para los servidores LDAP. El demonio backend en la implementación de referencia LDAP se actualizará de esta manera a su debido tiempo.

Agradecimientos

Agradecemos a Lucas Verney, valodzka y @_Blue_hornet por destacar estas vulnerabilidades de seguridad.


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.