BLOG | NGINX

Beheben von Sicherheitslücken in der NGINX LDAP-Referenzimplementierung

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Liam Crilly Miniaturbild
Liam Crilly
Veröffentlicht am 11. April 2022

Am 9. April 2022 wurden Sicherheitslücken in der NGINX LDAP-Referenzimplementierung öffentlich bekannt gegeben. Wir haben festgestellt, dass nur die Referenzimplementierung betroffen ist. NGINX Open Source und NGINX Plus sind selbst nicht betroffen und es sind keine Korrekturmaßnahmen erforderlich, wenn Sie die Referenzimplementierung nicht verwenden.

Die NGINX LDAP-Referenzimplementierung verwendet Lightweight Directory Access Protocol (LDAP), um Benutzer von Anwendungen zu authentifizieren, die von NGINX geproxied werden. Es wird als Python-Daemon und zugehörige NGINX-Konfiguration unter https://github.com/nginxinc/nginx-ldap-auth veröffentlicht, und sein Zweck und seine Konfiguration werden in unserem Blog ausführlich beschrieben.

Bereitstellungen der LDAP-Referenzimplementierung sind von den Sicherheitslücken betroffen, wenn eine der folgenden Bedingungen zutrifft. Nachfolgend erörtern wir die Bedingungen und wie sie gemildert werden können:

  1. Befehlszeilenparameter werden zum Konfigurieren des Python-Daemons verwendet
  2. Es gibt unbenutzte, optionale Konfigurationsparameter
  3. LDAP-Authentifizierung hängt von spezifischer Gruppenmitgliedschaft ab

Notiz: Die LDAP-Referenzimplementierung wird als Referenzimplementierung veröffentlicht und beschreibt die Funktionsweise der Integration und alle Komponenten, die zur Überprüfung der Integration erforderlich sind. Es handelt sich nicht um eine produktionsreife LDAP-Lösung. Beispielsweise erfolgt für den Benutzernamen und das Kennwort der Beispiel-Anmeldeseite keine Verschlüsselung, und in den Sicherheitshinweisen wird darauf hingewiesen.

Mildernder Umstand 1: Befehlszeilenparameter werden zum Konfigurieren des Python-Daemons verwendet

Die primäre Möglichkeit zum Konfigurieren der LDAP-Referenzimplementierung besteht in der Verwendung einer Reihe von proxy_set_header -Direktiven, wie in der Beispielkonfiguration und der Dokumentation beschrieben. Die Konfigurationsparameter können jedoch auch auf der Befehlszeile festgelegt werden, die den Python-Daemon initialisiert ( nginx-ldap-auth-daemon.py ).

Wenn Konfigurationsparameter in der Befehlszeile angegeben werden, kann ein Angreifer einige oder alle davon außer Kraft setzen, indem er speziell gestaltete HTTP-Anforderungsheader übergibt. Um sich davor zu schützen, stellen Sie sicher, dass alle irrelevanten Anforderungsheader während der Authentifizierung ignoriert werden, indem Sie dem Block „location = /auth-proxy“ in der NGINX-Konfiguration ( nginx-ldap-auth.conf im Repo) die folgende Konfiguration hinzufügen.

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Autorisierung $http_authorization; # Bei Verwendung von Basic-Authentifizierung
# ...
}

Mildernder Umstand 2: Unbenutzte, optionale Konfigurationsparameter

Wie in Bedingung 1 kann ein Angreifer speziell gestaltete HTTP-Anforderungsheader übergeben, um bestimmte Konfigurationsparameter zu überschreiben, wenn diese nicht in der Konfiguration festgelegt wurden. Beispielsweise kann die LDAP-Suchvorlage überschrieben werden, wenn sie nicht explizit in der Konfiguration festgelegt ist. Dies wird auf die gleiche Weise wie Bedingung 1 verteidigt, indem die folgende Konfiguration zum Block „location = /auth-proxy“ in der NGINX-Konfiguration hinzugefügt wird.

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Autorisierung $http_authorization; # Bei Verwendung von Basic-Authentifizierung
# ...
}

Mildernder Umstand 3: LDAP-Gruppenmitgliedschaft ist erforderlich

Der Python-Daemon bereinigt seine Eingaben nicht. Folglich kann ein Angreifer einen speziell gestalteten Anforderungsheader verwenden, um die Prüfung der Gruppenmitgliedschaft ( memberOf ) zu umgehen und so eine erfolgreiche LDAP-Authentifizierung zu erzwingen, selbst wenn der zu authentifizierende Benutzer nicht zu den erforderlichen Gruppen gehört.

Um dies zu verhindern, stellen Sie sicher, dass der Backend-Daemon, der das Anmeldeformular präsentiert, alle Sonderzeichen aus dem Benutzernamenfeld entfernt. Insbesondere müssen die öffnenden und schließenden Klammern – () – und das Gleichheitszeichen ( = ) entfernt werden, die für LDAP-Server alle eine spezielle Bedeutung haben. Der Backend-Daemon in der LDAP-Referenzimplementierung wird zu gegebener Zeit auf diese Weise aktualisiert.

Danksagungen

Wir danken Lucas Verney, valodzka und @_Blue_hornet für das Hervorheben dieser Sicherheitslücken.


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."