Обновления Nginx 1.26.3 и 1.27.4 с устранением уязвимости, связанной с TLS

Сформирован выпуск основной ветки nginx 1.27.4, в рамках которой продолжается развитие новых возможностей, а также выпуск параллельно поддерживаемой стабильной ветки nginx 1.26.3, в которую вносятся только изменения, связанные с устранением серьёзных ошибок и уязвимостей. В обновлениях устранена уязвимость (CVE-2025-23419), позволяющая обойти проверку клиентских TLS-сертификатов.

Уязвимость вызвана отсутствием должных проверок при обработке виртуальных хостов, привязанных к одному IP-адресу и номеру порта, и выбираемых при обращении по HTTPS на основании доменного имени, указанного при помощи TLS-расширения SNI. В подобных конфигурациях атакующий мог повторно использовать TLS-сеанс в контексте другого виртуального хоста для обхода аутентификации по клиентскому TLS-сертификату. Проблема проявляется в конфигурациях, поддерживающих возобновление TLS-сеансов при помощи “TLS session ticket” или использующих кэш TLS-сеансов в настройках сервера по умолчанию, в котором используется аутентификация по клиентским TLS-сертификатам. Уязвимость присутствует начиная с выпуска nginx 1.11.4 при сборке с OpenSSL и включении протокола TLSv1.3.

Не связанные с безопасностью изменения:

  • Добавлены возможности для снижения потребления ресурсов и уменьшения нагрузки на CPU при использовании TLS в конфигурациях с большим числом блоков server и location. Добавленные изменения позволяют вместо создания для каждого блока конфигурации отдельного контекста SSL (SSL_CTX в OpenSSL), использовать уже имеющийся контекст SSL из родительского блока.
  • Решены проблемы с долгой загрузкой файлов конфигурации из-за повторного разбора одного и того же набора TLS-сертификатов, ключей и списков удостоверяющих центров. Ускорена перезагрузка конфигурации за счёт повторного использования не изменившихся TLS-объектов, таких как сертификаты, ключи и CRL. Для отключения наследования объектов при обновлении конфигурации добавлена директива “ssl_object_cache_inheritable“.
  • Добавлен кэш для сертификатов и ключей, загруженных с использованием переменных в директивах (например, “ssl_certificate /etc/ssl/$ssl_server_name.crt”). Для управления кэшем добавлены директивы “ssl_certificate_cache“, “proxy_ssl_certificate_cache“, “grpc_ssl_certificate_cache” и “uwsgi_ssl_certificate_cache“. Через указанные директивы можно настроить максимальный размер кэша, время действия записей и время очистки невостребованных записей. Например: “ssl_certificate_cache max=1000 inactive=20s valid=1m;”.
  • Добавлена директива “keepalive_min_timeout“, определяющая таймаут, в течение которого nginx не будет закрывать keep-alive соединение с клиентом.
  • Решена проблема с появлением логе сообщений “gzip filter failed to use preallocated memory” при сборке с библиотекой zlib-ng.
  • Решена проблема со сборкой библиотеки libatomic, при использовании сборочной опции “–with-libatomic=DIR”
  • Устранена ошибка, приводившая к невозможности установить соединение по протоколу QUIC при использовании 0-RTT.
  • Обеспечено игнорирование запросов согласования версий QUIC, поступающих от клиентов.
  • Решены проблемы со сборкой в Solaris 10 с модулем ngx_http_v3_module.
  • Исправлены ошибки в реализации HTTP/3.
Release. Ссылка here.