BLOG | NGINX

Résolution des faiblesses de sécurité dans l'implémentation de référence LDAP NGINX

NGINX-Partie-de-F5-horiz-black-type-RGB
Miniature de Liam Crilly
Liam Crilly
Publié le 11 avril 2022

Le 9 avril 2022, des vulnérabilités de sécurité dans l' implémentation de référence LDAP NGINX ont été partagées publiquement. Nous avons déterminé que seule l’implémentation de référence est affectée. NGINX Open Source et NGINX Plus ne sont pas eux-mêmes concernés et aucune action corrective n'est nécessaire si vous n'utilisez pas l'implémentation de référence.

L'implémentation de référence LDAP de NGINX utilise le protocole LDAP (Lightweight Directory Access Protocol) pour authentifier les utilisateurs des applications proxyées par NGINX. Elle est publiée sous forme de démon Python et de configuration NGINX associée sur https://github.com/nginxinc/nginx-ldap-auth , et son objectif et sa configuration sont décrits en détail sur notre blog .

Les déploiements de l’implémentation de référence LDAP sont affectés par les vulnérabilités si l’une des conditions suivantes s’applique. Ci-dessous, nous discutons plus en détail des conditions et de la manière de les atténuer :

  1. Les paramètres de ligne de commande sont utilisés pour configurer le démon Python
  2. Il existe des paramètres de configuration facultatifs et inutilisés
  3. L'authentification LDAP dépend de l'appartenance à un groupe spécifique

Note: L'implémentation de référence LDAP est publiée en tant qu'implémentation de référence et décrit les mécanismes de fonctionnement de l'intégration et tous les composants requis pour vérifier l'intégration. Il ne s’agit pas d’une solution LDAP de niveau production. Par exemple, il n’y a pas de cryptage du nom d’utilisateur et du mot de passe utilisés pour l’exemple de page de connexion, et les avis de sécurité le signalent.

Condition atténuante 1 : Les paramètres de ligne de commande sont utilisés pour configurer le démon Python

La principale façon de configurer l'implémentation de référence LDAP consiste à utiliser un certain nombre de directives proxy_set_header comme détaillé dans l' exemple de configuration et la documentation . Cependant, les paramètres de configuration peuvent également être définis sur la ligne de commande qui initialise le démon Python ( nginx-ldap-auth-daemon.py ).

Lorsque des paramètres de configuration sont spécifiés sur la ligne de commande, un attaquant peut remplacer certains ou tous ces paramètres en transmettant des en-têtes de requête HTTP spécialement conçus. Pour vous protéger contre cela, assurez-vous que tous les en-têtes de requête superflus sont ignorés lors de l'authentification en ajoutant la configuration suivante au bloc location = /auth-proxy dans la configuration NGINX ( nginx-ldap-auth.conf dans le référentiel).

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Autorisation $http_authorization; # Si vous utilisez l'authentification de base
# ...
}

Condition atténuante 2 : Paramètres de configuration facultatifs et non utilisés

Comme dans la condition 1, un attaquant peut transmettre des en-têtes de requête HTTP spécialement conçus pour remplacer certains paramètres de configuration, s’ils n’ont pas été définis dans la configuration. Par exemple, le modèle de recherche LDAP peut être remplacé s'il n'est pas explicitement défini dans la configuration. Ceci est défendu de la même manière que la condition 1, en ajoutant la configuration suivante au bloc location = /auth-proxy dans la configuration NGINX.

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Autorisation $http_authorization; # Si vous utilisez l'authentification de base
# ...
}

Condition atténuante 3 : L'appartenance au groupe LDAP est requise

Le démon Python ne nettoie pas ses entrées. Par conséquent, un attaquant peut utiliser un en-tête de requête spécialement conçu pour contourner la vérification d'appartenance au groupe ( memberOf ) et ainsi forcer l'authentification LDAP à réussir même si l'utilisateur authentifié n'appartient pas aux groupes requis.

Pour atténuer ce problème, assurez-vous que le démon backend qui présente le formulaire de connexion supprime tous les caractères spéciaux du champ du nom d'utilisateur. En particulier, il doit supprimer les parenthèses ouvrantes et fermantes – ( ) – et le signe égal ( = ), qui ont tous une signification particulière pour les serveurs LDAP. Le démon backend dans l'implémentation de référence LDAP sera mis à jour de cette manière en temps voulu.

Remerciements

Nous remercions Lucas Verney, valodzka et @_Blue_hornet d'avoir mis en évidence ces vulnérabilités de sécurité.


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."