Apache httpd 2.4.58 のリリースノート

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

脆弱性修正

* Apache HTTP Server には、HTTP/2 ストリームのメモリが RST の際に直ちに回収されていませんでした。HTTP/2 ストリームがクライアントによりリセットされた(RST フレーム)場合、リクエストのメモリリソースがすぐには回収されない時間ウィンドウが存在していました。すぐに回収されずに、解放が接続のクローズ時まで遅延されていたのです。クライアントは、新たなリクエストとリセットを送ることで、接続をビジーでオープンのままとし続けることができ、メモリのフットプリントを増大させ続ける可能性がありました。接続のクローズ時には、全てのリソースが回収されますが、プロセスはその前にメモリを使い果たす可能性があったのです。この問題は、報告者によって、彼ら自身のテストクライアントを使った CVE-2023-44487 (HTTP/2 Rapid Reset Exploit) のテスト中に発見されました。「通常の」HTTP/2 の使用方法であれば、このバグに遭遇する確率は非常に低いです。メモリが確保され続けていることは、接続のクローズ時やタイムアウトが発生するまでは気がつくのが困難です。ユーザはバージョン 2.4.58 にアップグレードすることが推奨されます。この問題が修正されています。(CVE-2023-45802)

* Apache HTTP Server には、初期ウィンドウサイズが 0 の HTTP/2 による DoS の可能性がありました。攻撃者は、初期ウィンドウサイズ 0 の HTTP/2 接続をオープンすることで、Apache HTTP Server でのその接続の処理を永久にブロックすることができました。これは、いわゆる「スローロリス」攻撃パターンに類似の方法で、サーバのワーカリソースを使い果たすのに使用することができました。この問題はバージョン 2.4.58 で修正され、問題となる接続は設定された接続タイムアウト時間後に適切に終了されます。この問題は、Apache HTTP Server の 2.4.55 から 2.4.57 に影響します。ユーザはバージョン 2.4.58 にアップグレードすることが推奨されます。この問題が修正されています。(CVE-2023-43622)

* mod_macro: Apache HTTP Server の mod_macro に境界外読み出しの脆弱性がありました。この問題は 2.4.57 までの Apache HTTP Server に影響します。(CVE-2023-31122)

不具合修正

* mod_ssl: OpenSSL 3 使用時に SSL_OP_IGNORE_UNEXPECTED_EOF が設定されている場合は、”SSL Library Error: error:0A000126: SSL routines::unexpected eof while reading” というログメッセージが出ないようになりました。

* mod_http2: ストリームの早期クリーンアップが改善されました。

* mod_proxy_http2: 応答が既に進行中の場合の接続エラーのエラー処理が改善されました。

* mod_http2: 主接続の出力処理でクラッシュにつながるバグが修正されました。これは、HTTP/2 接続上の最後のリクエストの処理が完了し、セッションがシャットダウンすることを決めたときにだけ発生します。この問題により、以前の書き出しが依然として進行中にも関わらず最終的な GOAWAY を送信しようとすることにつながる可能性がありました。詳細は PR 66646 を参照してください。(PR 66646)

* mod_proxy_http2: `X-Forward-Host` ヘッダが正しい値を伝えるよう修正されました。PR66752 の修正となります。(PR66752)

* mod_http2: RFC 8441 に記載されているような、HTTP/2 経由の WebSocket のブートストラップのサポートが追加されました。新たなディレクティブ ‘H2WebSockets on|off’ が追加されました。この機能はデフォルトでは有効化されません。マニュアルにも記載があるように、この機能は “ProxyPass backend-url upgrade=websocket” という設定を使って、それ以上の変更なしの設定で動作するはずです。将来的には WebSocket 用の特殊サーバモジュールが、まずは IO イベントが HTTP/2 のものとは異なる場合の処理用として適応されるでしょう。HTTP/2 WebSocket はネイティブのパイプを持つプラットフォームでサポートされます。これは Windows には当てはまりません。

* mod_rewrite: OSCP ステープリングでの末尾の ? と [QSA]. 両方でのリグレッションが修正されました。(PR 66672)

* mod_http2: 既にクローズされた接続で未処理データをフラッシュする処理のバグが修正されました。このバグにより、ビジーループが発生し、HTTP/2 セッションが無事クローズされるのを妨げていました。PR 66624 の修正となります。(PR 66624)

* mod_http2: v2.0.15 で以下の修正、改善が行われました。
– 新たなディレクティブ ‘H2EarlyHint name value’ が追加され、レスポンスにヘッダを追加します。”103 Early Hints” が送信されたときに既に取り上げられていたものです。’name’ および ‘value’ は、HTTP のフィールドの制約に従わなければなりません。このディレクティブは何度も繰り返すことができ、同じ名前のヘッダフィールドが追加されます。’Link’ ヘッダに ‘preload’ リレーションをつけて送信すると、クライアント側で有効化され、サポートされていれば、HTTP/2 PUSH を行うこともできます。
– 接続が “keepalive” handling” に戻った時に、例えば、処理されたリクエストが最後の未解決のリクエストだった場合などにリクエストがタイミングよくログ出力やアカウント処理が行われていなかった問題が修正されました。この問題により、アクセスログに現れるのが遅くなり、間違った持続時間が報告されていました。
– リクエストで送信されたバイト数が ‘%O’ ログフォーマットで正確に報告されるようになりました。これは #203 を解決します。この問題は、長く未解決だった問題で、mod_h2 が、実際に接続に配置された数ではなく、内部バッファから大きすぎる数を報告していました。バイト数は今では H2CopyFiles が有効化されていてもいなくても同じになります。

* mod_proxy_http2: リトライ処理が一時的なエラーをリークしないように修正されました。既存の接続が他方によりシャットダウンされたことを検知する際、503 レスポンスが、リクエストが新たな接続でリトライされた場合でもリークしていました。

* mod_rewrite: mod_rewrite は test_char.h を必要とするので、 ‘server’ ディレクトリがインクルードパスに追加されるようになりました。(PR 66571)

* mod_http2: 新たなディレクティブ `H2ProxyRequests on|off` が追加され、フォワードプロキシ設定での HTTP/2 リクエストの処理が有効化できるようになりました。一般のフォワードプロキシは ProxyRequests` で有効化されます。HTTP/2 プロトコルがそのようなサーバ/ホストでも有効化する場合は、この新たなディレクティブが追加で必要になります。

* core: conf/mime.types が更新されました。
– .js が ‘application/javascript’ から ‘text/javascript’ に移動されました。
– .mjs が ‘text/javascript’ として追加されました。
– .opus (‘audio/ogg’) が追加されました。
– ‘application/vnd.geogebra.slides’ が追加されました。
– WebAssembly MIME タイプと拡張が追加されました。

* mod_proxy_http2: データをフロントエンド側で送信する際に、バックエンド接続で間違った “bucket_alloc” を使用していた問題が修正されました。この問題により、稀にクラッシュや無限ループを引き起こしていました。

* mod_proxy_http2: リトライ/レスポンス処理のバグが修正されました。このバグにより、誤ったステータスコードになっていたり、レスポンス本体の最後で送信される HTTP メッセージのサイズがアナウンスされた content-length を超えるなどの問題が起こる可能性がありました。

* mod_http2: bucket_beam が破壊されたとき、消費済みのバケットと保留中のバケットの整理の順番が間違っていた問題が修正されました。

* mod_http2: 内部リダイレクトの際の二重の chunked-encoding が回避されるようになりました。(PR 66597)

* mod_http2: server-status の `Total Accesses` のレポートで HTTP/2 リクエストを二重にカウントしないように修正されました。(PR 66801)

* mod_ssl: OCSP ステープリングでの証明書失効メッセージの処理が修正されました。(PR 66626)

* mod_http2: ストリームのタイムアウト処理のバグが修正されました。

* mod_tls: rustls-ffi がバージョン 0.9.2 以降に更新されました。適切なバージョンがインストールされるよう configure でチェックが行われます。変更された clienthello メンバ名に対するコードも修正されています。

* mod_md:
– 新たなディレクティブ `MDMatchNames all|servernames` によって、MDomains がどのように VirtualHosts にマッチするかをよりコントロールができるようになりました。
– 新たなディレクティブ `MDChallengeDns01Version` が追加されました。これを `2` に設定すると、コマンドに `teardown` 起動時のチャレンジ値も提供します。デフォルトのバージョン 1 の場合は、`setup` 起動時にだけこのパラメータを受け取ります。#312 を参照してください。
– “manual” モードにある Managed Domain について、全ての使用されている ServerName と ServerAlias が MDomain の一部である場合、全ての名前が存在しているわけではない場合は、チェックの際に、エラー (AH10040) ではなく警告を報告するようになりました。
– MDChallengeDns01 が、個々のドメイン毎に設定できるようになりました。
– チャレンジティアダウンが起動されるべきときに起動されない問題が修正されました。

* OpenLDAP 2.2 以降向けの APR-util のりバインドキャッシュの性能オーバヘッドが回避されました。(PR 64414)

* mod_http2: 新たなディレクティブ ‘H2MaxDataFrameLen n’ が追加されました。これは、一個の HTTP/2 DATA フレームに収めることのできるレスポンス本体のバイト数の最大量を指定します。これを 0 に設定すると制限がなくなります(しかし、プロトコルで許される最大サイズが効いてきます)。デフォルトでは、このモジュールは、可能な最大サイズを使うことを試みます。これは 16KB 周辺の値となります。これは最大値を設定します。利用できるレスポンスデータがもっと少ない場合は、より小さなフレームが送信されます。

* mod_md: MDMessageCmd と MDChallengeDns01 経由で開始される、サーバの環境変数をプログラムに渡す処理が *nix システムで修正されました。https://github.com/icing/mod_md/issues/319 を参照してください。

* mod_dav: リポジトリのルートパスを設定するための DavBasePath ディレクティブが追加されました。(PR 35077)

* mod_alias: AliasPreservePath ディレクティブが追加されました。これは、ある位置にあるエイリアスの後でフルパスをマップするのに使われます。

* mod_alias: RedirectRelative ディレクティブが追加されました。これは、相対的なリダイレクトターゲットがそのまま発行されることを許します。

* core: 新たなフォーマット %{z} および %{strftime-format} が ErrorLogFormat に追加され、これらのフォーマットが充分早く設定されれば、全てのログ行に適用されることが保証されます。(PR 62161)

* mod_deflate: ETag がどのように変更されるかをコントロールする DeflateAlterETag が追加されました。’NoChange’ パラメータで 2.2.x の動作を模倣します。(PR 45023, PR 39727)

* core: send_brigade_nonblocking() が最適化されました。

* mod_status: 重複したキー “BusyWorkers” および “IdleWorkers” が削除されました。この二つの設定の間の矛盾が、SERVER_GRACEFUL 状態のワーカをビジーとはカウントせず、代わりに新たなカウンタ “GracefulWorkers” (あるいは “workers gracefully restarting” という HTML ビュー) でカウントすることにより解消されました。また、非同期 MPM 向けの既存のプロセステーブル毎の HTML に graceful counter が新たなカラムとして追加されました。(PR 63300)

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

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