Apache httpd 2.4.52 のリリースノート

このドキュメントは 2021 年 12 月 20 日にリリースされた Apache httpd 2.4.52 のリリースノートの日本語訳です。
ダウンロードは Apache httpd ダウンロードより行えます。
以下はリリースの詳細と、最新情報およびドキュメントを補足するその他情報について記載しています。

脆弱性修正

* Apache HTTP Server 2.4.51 およびそれ以前の mod_lua にマルチパートのコンテントのパーシングでバッファオーバーフローの可能性がありました。この問題が修正されました。注意深く細工したリクエスト本体により、mod_lua のマルチパートのパーサ(Lua スクリプトから呼び出される r:parsebody()) でバッファオーバーフローを引き起こすことが可能でした。Apache httpd チームは、そのようなリクエスト本体を細工することが可能であるにも関わらず、この脆弱性の発現に気が付いていませんでした。この問題は、Apache HTTP Server 2.4.51 およびそれ以前に影響を与えます。(CVE-2021-44790)

* Apache HTTP Server 2.4.51 およびそれ以前のフォワードプロキシ設定に NULL ポインタ逆参照あるいは SSRF の可能性がありました。この問題が修正されました。フォワードプロキシとして設定された httpd に細工した URL を送り付けると、クラッシュ(NULL ポインタ逆参照)を引き起こしたり、フォワードプロキシとリバースプロキシの設定が入り混じった場合にはリクエストを宣言された Unix ドメインソケットのエンドポイントに向けることが可能でした(Server Side Request Forgery)。この問題は、Apache HTTP Server 2.4.7 から 2.4.51 に影響します。(CVE-2021-44224)

不具合修正

* http: HTTP の仕様に従い、完全に指定された URI パスでフォワードプロキシされないものは、http(s) スキームを持つこと、フォワードプロキシされるものはホスト名を持つことが強制されるようになりました。

* OpenSSL の autoconf の検出が改善されました。指定された OpenSSL のパスから openssl.pc を探し出すようになりました。

* mod_proxy_connect, mod_proxy: 既にクライアントに送付済みのステータスコードは変更されないようになりました。

* mod_http: リクエスト中の “Expect: 100-Continue” の結果として中間応答を送付する際、リクエストの現在のステータスコードではなく、正しく “100 Continue” ステータスコードが送付されるようになりました。(PR 65725)

* mod_dav: CalDAV など、DAV 拡張のいくつかは、プロパティを生成する際に考慮する必要がある、ドキュメント要素とプロパティ要素の両方を指定します。ドキュメント要素とプロパティ要素が dav_get_liveprop_element() を呼び出すことで dav_liveprop_elem 構造体で利用可能になりました。

* mod_dav: ユーティリティー関数 dav_validate_root_ns()、dav_find_child_ns()、dav_find_next_ns()、dav_find_attr_ns()、dav_find_attr() が追加され、他のモジュールでも利用できるようになりました。

* mpm_event: ロードのピーク後、アイドル状態の子プロセスの停止処理が再開されるようになりました。

* mod_http2: サーバリミットの処理で二つのリグレッションが修正されました。
1. MaxRequestsPerChild などのサーバリミットに到達した時、HTTP/2 接続は、新たな接続の際に GOAWAY フレームを早く送りすぎていたため、不正なプロトコル状態になり、クライアントはリクエストに失敗していました。本モジュールは HTTP/2 プロトコルを正しく初期化するようになり、クライアントは、GOAWAY フレームがアナウンスされてからシャットダウンまでにリクエストを一つサブミットできるようになりました。
2. v1.15.24 のリグレッションが修正されました。この問題により、graceful リロードや MaxConnectionsPerChild に達した際に httpd 子プロセスが終了されない可能性がありました。 その時、未処理の h2 リクエストがキューに入れられると、それらはストールしていました。<https://github.com/icing/mod_h2/issues/212> を参照してください。

* mod_ssl: OpenSSL v3 のビルドサポートが追加されました。

* mod_proxy_connect: トンネリング時のバックエンドタイムアウトまたはクライアントタイムアウトの最小値が尊重されるようになりました。

* mod_proxy: “SetEnv proxy-nohalfclose” (または同様の設定)により、プロトコルのトンネリング時の TCP ハーフクローズ転送を無効化できるようになりました。

* core: サードパーティモジュールによりソケットが NULL として ap_lingering_close() が呼び出されても安全になりました。

* mod_md: 秘密鍵を読み込むのに失敗した場合のメモリリークが修正されました。

* mod_md: v2.4.8 で以下の変更が追加されました。
– ACME External Account Binding (EAB) のサポートが追加されました。新たなディレクティブ `MDExternalAccountBinding` を使用して、自分の CA により提供されたかのようにサーバに鍵識別子と HMAC の値を提供することができます。いくつかのサーバで作業してわかったことは、EAB の処理は CA を通して一様ではないということです。Sectigo Certificate Manager でデモモードで最初にテストした時は問題ありませんでした。しかし、例えば、ZeroSSL は、EAB の値を一度しか使えないものとみなしているようで、二番目のアカウントを作ったり、最初のアカウントを同じ EAB で再度作ろうとすると失敗してしまいます。
– ‘MDCertificateAuthority’ ディレクティブは、そのパラメータが http/https URL であるか、既知の名前のセットのうちの一つであるかをチェックするようになりました。既知の名前とは、現時点では ‘LetsEncrypt’、’LetsEncrypt-Test’、’Buypass’、’Buypass-Test’ であり、大文字小文字の区別はありません。デフォルトが LetsEncrypt であることは変わりません。
– `MDContactEmail` は、`<MDomain dnsname>` セクション内で指定することが可能になりました。
– オーダー向けの 401 HTTP ステータスコードが 403 などと同様に扱われるようになりました。いくつかの ACME サーバは他のサーバからのアクセスオーダーに対し、その方を好むように見えるためです。
– 証明書チェーンを取り出す際に、HTTP Content-Type が認識できない場合であってもレスポンスを読むことを試すようになりました。
– 証明書の更新のエラーカウンタをリセットし、さらなる試みで遅延を増加させるのを妨害するバグが修正されました。
– 既に存在するオーダーが不正なドメインを持っている場合に毎回更新プロセスが処理をあきらめる問題が修正されました。前のオーダーがそうなっていた場合は、新しいオーダーはまた最初から作り直されます。<https://github.com/icing/mod_md/issues/268> を参照してください。
– 静的証明書ファイルと更新が同時に設定された場合の md-status ハンドラの混乱が修正されました。

* mod_md: External Account Binding (EAB) の値は、別の JSON ファイルから読み込むように設定することもできるようになりました。これにより、秘密情報をさらすことなく、サーバの設定ファイルのパーミッションを誰でも読み取り可のまま維持することが可能になります。

* mod_proxy_uwsgi: PATH_INFO の先頭の重複したスラッシュが削除されました。

詳細は以下をご覧ください。

https://downloads.apache.org/httpd/CHANGES_2.4