ブログ | NGINX

NGINX LDAP リファレンス実装のセキュリティ上の弱点への対処

NGINX-F5 水平黒タイプ RGB の一部
リアム・クリリー サムネイル
リアム・クリリー
2022年4月11日公開

2022 年 4 月 9 日に、 NGINX LDAP リファレンス実装のセキュリティ脆弱性が公開されました。 影響を受けるのはリファレンス実装のみであることが判明しました。 NGINX Open Source および NGINX Plus 自体は影響を受けないため、リファレンス実装を使用しない場合は修正措置は必要ありません。

NGINX LDAP リファレンス実装は、Lightweight Directory Access Protocol (LDAP) を使用して、NGINX によってプロキシされているアプリケーションのユーザーを認証します。これは、Python デーモンと関連する NGINX 構成としてhttps://github.com/nginxinc/nginx-ldap-authで公開されており、その目的と構成についてはブログで詳しく説明されています。

次のいずれかの条件が当てはまる場合、LDAP リファレンス実装の展開は脆弱性の影響を受けます。 以下では、状況とその緩和方法についてさらに詳しく説明します。

  1. コマンドラインパラメータはPythonデーモンの設定に使用されます
  2. 未使用のオプション構成パラメータがあります
  3. LDAP認証は特定のグループメンバーシップに依存する

注記: LDAP リファレンス実装はリファレンス実装として公開されており、統合がどのように機能するかの仕組みと、統合を検証するために必要なすべてのコンポーネントについて説明します。 これは本番環境レベルの LDAP ソリューションではありません。 たとえば、サンプルのログイン ページで使用されるユーザー名とパスワードは暗号化されておらず、セキュリティ通知でこの点が指摘されています。

緩和条件1: コマンドラインパラメータはPythonデーモンの設定に使用されます

LDAP リファレンス実装を構成する主な方法は、サンプル構成ドキュメントに詳述されているように、いくつかのproxy_set_headerディレクティブを使用することです。 ただし、構成パラメータは、Python デーモン ( nginx-ldap-auth-daemon.py ) を初期化するコマンドラインでも設定できます。

構成パラメータがコマンドラインで指定されている場合、攻撃者は特別に細工した HTTP リクエスト ヘッダーを渡すことで、構成パラメータの一部またはすべてを上書きできます。 これを防ぐには、NGINX 構成 (リポジトリ内のnginx-ldap-auth.conf ) のlocation = /auth-proxyブロックに次の構成を追加して、認証中に余分なリクエスト ヘッダーが無視されることを確認します。

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Authorization $http_authorization; # 基本認証を使用する場合
# ...
}

緩和条件2: 未使用のオプション構成パラメータ

条件 1 と同様に、攻撃者は特別に細工した HTTP リクエスト ヘッダーを渡して、構成で設定されていない場合に特定の構成パラメータを上書きすることができます。 たとえば、LDAP 検索テンプレートは、構成で明示的に設定されていない場合は上書きされる可能性があります。 これは、条件 1 と同じ方法で防御され、NGINX 構成のlocation = /auth-proxyブロックに次の構成が追加されます。

location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Authorization $http_authorization; # 基本認証を使用する場合
# ...
}

緩和条件3: LDAPグループメンバーシップが必要です

Python デーモンは入力をサニタイズしません。 その結果、攻撃者は特別に細工したリクエスト ヘッダーを使用してグループ メンバーシップ ( memberOf ) チェックをバイパスし、認証対象のユーザーが必要なグループに属していない場合でも LDAP 認証を強制的に成功させることができます。

これを軽減するには、ログイン フォームを表示するバックエンド デーモンがユーザー名フィールドから特殊文字を削除するようにします。 特に、LDAP サーバーにとって特別な意味を持つ、開き括弧と閉じ括弧( )および等号 ( = ) を削除する必要があります。 LDAP リファレンス実装のバックエンド デーモンは、今後この方法で更新される予定です。

謝辞

これらのセキュリティの脆弱性を指摘してくださった Lucas Verney、valodzka、@_Blue_hornet に感謝します。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"