NGINX.COM
Web Server Load Balancing with NGINX Plus

2022年4月9日、NGINXのLDAP拡張機能におけるセキュリティの脆弱性が公開されました。拡張機能のみが影響を受けると判断しております。NGINX オープンソースやNGINX Plus自身は影響を受けません。LDAP拡張機能の利用がない場合には、是正措置の実施は必要ありません。

NGINX LDAP拡張機能は、NGINXがプロキシーするアプリケーションがユーザーを認証するためにLDAPを利用します。この機能はPythonのデーモンとして動作させ、https://github.com/nginxinc/nginx-ldap-auth のNGINX設定に関連します。この目的や設定方法については、ブログで詳しく紹介しています。

LDAP 拡張機能を実装している場合、以下の条件のいずれかに該当すると、脆弱性の影響を受けます。以下では、これらの条件とその対策について詳しく説明します。

  1. コマンドラインパラメータを、Pythonデーモンの設定に使用している
  2. 未使用のその他の設定パラメータがある
  3. LDAP認証が特定のグループ情報に依存している

注意: LDAP拡張機能は、参考の実装方法を紹介しており、関連するコンポーネントが動作に仕組みと、検証する方法について記載しております。これは本番環境に適したLDAPの機能ではありません。例えば、サンプルログインページに利用するユーザー名やパスワードは暗号化されず、セキュリティの通知がなされます。

緩和策1:コマンドラインパラメータを、Pythonデーモンの設定に使用している

LDAP拡張機能を利用する主な実装方法が、サンプルの設定ドキュメントで説明されているように、いくつかのproxy_set_headerディレクティブを使用することです。しかし、設定パラメータはPythonデーモンの初期設定を行うコマンドライン (nginx-ldap-auth-daemon.py) の利用も可能です。

コマンドラインで設定パラメータを指定した場合、攻撃者はいくつかまたは全てのパラメータにたいし、情報を加工したHTTPリクエストヘッダーを使うことで上書きすることが可能です。これらの動作を防ぐため、NGINX設定(GitHubレポジトリ内nginx-ldap-auth.conf )のlocation = /auth-proxyブロックにある対応する設定パラメータが空の文字列であることを確認してください。

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

緩和策2:未使用のその他の設定パラメータがある

緩和策1では、攻撃者が特別に加工したHTTPリクエストのヘッダーを使って特定の設定パラメータを上書きすることが可能であり、これはLDAPサーチのテンプレートで使われている設定によるものでした。これを防ぐため、NGINX設定ファイルのlocation = /auth-proxyブロックにある利用されていないその他の設定パラメータが空の文字列であることを確認してください。

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

緩和策3:LDAP認証が特定のグループ情報に依存している

Pythonデーモンは入力値の無害化は行いません。その結果、攻撃者はLDAPのグループ情報(memberOf)の確認をバイパスするために、特別に加工したHTTPヘッダーを使い、認証されたユーザーが特定のグループに所属していない場合においても認証を成功させることが可能となります。

これを緩和するため、ログインフォームを表示するバックエンドデーモンが、ユーザー名フィールドから特殊文字を除去することを確認します。特に、小括弧の初めと終わりの文字 – ( ) – と、等号 (=) などLDAPサーバで特別な意味を持つ文字列の除去が必要です。LDAP拡張機能のバックエンドデーモンは順次この様にアップデートを行う予定となっています。

謝辞

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

Hero image
Kubernetes のテスト環境から本番環境への移行

快適なKubernetes環境を実現するには、Kubernetesネイティブなやり方でトラフィックを理解し、管理する必要があります。
このEBOOK では、POC からカナリアリリース、ブルーグリーンデプロイメントを利用し本番環境にいたるまで、トラフィックフローを柔軟に効果的に管理する際に必要となる情報や、Kubernetes 戦略に求められる要素を明確でわかりやすい解説と共に提供いたします。



著者について

Liam Crilly

Director of Product Management

著者について

Timo Stark

Product Management Engineer

About F5 NGINX

F5 NGINXについて
F5, Inc.は、人気のオープンソースプロジェクト「NGINX」を支援しています。NGINXはモダンアプリケーションを開発・構築するためのテクノロジースイートを提供しています。NGINXとF5製品との併用で、コードからユーザーまでの広範なアプリケーション領域をサポートし、マルチクラウドアプリケーションサービスとしてNetOpsとDevOps間の課題を解決します。

詳しくはnginx.co.jpをご覧ください。Twitterで@nginxをフォローして会話に参加することもできます。