Релиз http-сервера Apache 2.4.58 с устранением DoS-уязвимостей в HTTP/2

Опубликован релиз HTTP-сервера Apache 2.4.58, в котором представлено 33 изменения и устранены три уязвимости, две из которых связаны с возможностью осуществления DoS-атаки на системы, использующие протокол HTTP/2.

  • CVE-2023-45802 – создание условий для исчерпания свободной памяти из-за отложенного освобождения памяти после сброса потока HTTP/2 пакетом с флагом RST. Так как память освобождается не сразу после обработки флага RST, а только после закрытия соединения, атакующий может значительно повысить потребление памяти, отправляя новые запросы и сбрасывая их RST-пакетом, но при этом не закрывая соединение.
  • CVE-2023-43622 – бесконечная блокировка обработки соединения HTTP/2, если оно было открыто с выставлением в 0 начального размера скользящего окна. Уязвимость может использоваться для организации отказа в обслуживании через исчерпание лимита на максимально допустимое число открытых соединений.
  • CVE-2023-31122 – уязвимость в mod_macro, приводящая к чтению данных из области вне выделенного буфера.

Среди изменений, не связанных с безопасностью:

  • В mod_http2 добавлена поддержка использования протокола WebSocket поверх потока в соединении HTTP/2 (RFC 8441). Для включения WebSocket поверх HTTP/2 предложена директива ‘H2WebSockets on|off’.
  • В mod_http2 добавлена директива ‘H2EarlyHint name value’ для добавлена заголовков в ответ “103 Early Hints”.
  • В mod_http2 добавлена директива ‘H2ProxyRequests on|off’ для управление включением обработки запросов по протоколу HTTP/2 в конфигурации прокси.
  • В mod_http2 добавлена директива ‘H2MaxDataFrameLen n’ для ограничения максимального размера тела ответа в байтах, передаваемого в одном DATA-кадре в HTTP/2. По умолчанию задан лимит в 16КБ.
  • Обновлён файл mime.types, в котором расширение “.js” привязано к типу ‘text/javascript’ вместо ‘application/javascript’ и добавлены расширения: “.mjs” (с типом ‘text/javascript’) и “.opus” (‘audio/ogg’). Добавлены MIME-типы и расширения, применяемые в WebAssembly.
  • Модуль mod_tls (альтернатива mod_ssl на языке Rust) переведён на использование библиотеки rustls-ffi 0.9.2+.
  • В модуль mod_md добавлена директива ‘MDMatchNames all|servernames’ для управления сопоставлением MDomains с содержимым VirtualHosts.
  • В модуль mod_md добавлена директива ‘MDChallengeDns01Version’ для выбора версии протокола ACME, используемого при верификации через DNS.
  • В mod_md разрешено использование директивы MDChallengeDns01 для отдельных доменов.
  • В mod_dav добавлена директива ‘DavBasePath’ для настройки пути к корню репозитория WebDav.
  • В mod_alias добавлена директива ‘AliasPreservePath’ для использования в качестве полного пути значения Alias в блоке Location.
  • В mod_alias добавлена директива ‘RedirectRelative’, допускающая перенаправление с использованием относительных путей.
  • В директиву ErrorLogFormat добавлены спецификаторы формата %{z} и %{strftime-format}.
  • В mod_deflate добавлена директива ‘DeflateAlterETag’ для управления изменением ETag при использовании сжатия.
  • Проведена оптимизация производительности функции send_brigade_nonblocking().
  • В mod_status обеспечено удаление дубликатов ключей “BusyWorkers” и “IdleWorkers”, и добавлен новый счётчик “GracefulWorkers”.
Release. Ссылка here.