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で公開されています。その目的と設定については、F5のブログで詳しく説明しています。
LDAPリファレンス実装を導入している環境では、以下のいずれかの条件に該当する場合、脆弱性の影響を受けます。以下では、各条件とその緩和方法について詳しく説明します。
注: LDAPリファレンス実装は、統合の仕組みと、統合の検証に必要なすべてのコンポーネントを説明するためのリファレンス実装として公開されています。本番環境向けのLDAPソリューションではありません。たとえば、サンプルのログインページで使用するユーザー名とパスワードは暗号化されておらず、この点はセキュリティ通知にも明記されています。
緩和条件1:コマンドラインパラメーターを使用したPythonデーモンの設定
LDAPリファレンス実装は、主にproxy_set_headerディレクティブを複数使用して設定します。詳しくは、サンプル設定およびドキュメントを参照してください。ただし、Pythonデーモン(nginx-ldap-auth-daemon.py)を初期化するコマンドラインでも、設定パラメーターを指定できます。
コマンドラインで構成パラメーターを指定すると、攻撃者が細工したHTTPリクエストヘッダーを渡すことで、その一部またはすべてを上書きできる可能性があります。これを防ぐには、認証時に不要なリクエストヘッダーが無視されるよう、NGINX構成内の「location = /auth-proxy」ブロック(リポジトリ内の「nginx-ldap-auth.conf」)に次の構成を追加してください。
location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Authorization $http_authorization; # If using Basic auth
# ...
}緩和条件2:未使用のオプション設定パラメーター
条件1と同様に、特定の設定パラメーターが構成で設定されていない場合、攻撃者は細工したHTTPリクエストヘッダーを渡して、それらのパラメーターを上書きできます。たとえば、LDAP検索テンプレートが構成で明示的に設定されていない場合、上書きされる可能性があります。条件1と同じ方法で、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デーモンは入力をサニタイズしません。そのため、攻撃者は細工したリクエストヘッダーを使用して、グループメンバーシップ(memberOf)チェックを回避し、認証対象のユーザーが必要なグループに属していない場合でも、LDAP認証を強制的に成功させることができます。
この問題を緩和するには、ログインフォームを表示するバックエンドデーモンが、ユーザー名フィールドから特殊文字をすべて除去するようにしてください。特に、LDAPサーバーにとって特別な意味を持つ、左右の丸括弧( )と等号(=)を除去する必要があります。LDAPリファレンス実装のバックエンドデーモンも、今後同様に更新される予定です。
謝辞
これらのセキュリティ脆弱性をご指摘いただいたLucas Verney氏、valodzka氏、@_Blue_hornet氏に感謝いたします。
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります