nginx 1.27.4 и 1.26.3: CVE-2025-23419 и кэш сертификатов

nginx 1.27.4 и 1.26.3: CVE-2025-23419 и кэш сертификатов

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

Какие версии nginx актуальны сейчас

По новостям nginx.org, 15 сентября 2026 года вышли nginx 1.30.5 stable и 1.31.6 mainline с исправлением переполнения буфера в ngx_http_v3_module (CVE-2026-90439). Если на сервере всё ещё 1.26.x или 1.27.x, обновляться нужно не ради CVE-2025-23419, а ради всего, что закрыли позже. В списке уязвимостей nginx видно, какие версии чем затронуты.

CVE-2025-23419: чужая TLS-сессия обходит проверку клиентского сертификата

Ошибка в проверке виртуальных серверов при TLS 1.3 и SNI позволяла возобновить TLS-сессию в другом server-блоке и так обойти проверку клиентского сертификата. Проблема касается схем, где на одном IP и порту несколько виртуальных серверов, в части из них включена проверка клиентских сертификатов (mTLS), а сессии переиспользуются через общий кэш или session tickets. Уязвимы версии с 1.11.4 по 1.27.3, исправлено в 1.26.3 и 1.27.4. Опасность nginx оценил как среднюю.

Что изменилось в 1.26.3 stable

В stable-ветке, по журналу изменений 1.26, кроме исправления CVE только мелочи:

  • исправление в ngx_http_mp4_module;
  • nginx больше не пишет в лог предупреждения «gzip filter failed to use preallocated memory» при сборке с zlib-ng;
  • снова собирается libatomic из исходников с опцией --with-libatomic=DIR;
  • nginx игнорирует пакеты согласования версии QUIC от клиентов;
  • ngx_http_v3_module снова собирается на Solaris 10 и старше, плюс исправления в HTTP/3.

Что добавили в 1.27.4 mainline

В mainline те же исправления и ещё несколько новых директив, их описание есть в журнале изменений:

  • ssl_certificate_cache, а для проксирования proxy_ssl_certificate_cache, grpc_ssl_certificate_cache и uwsgi_ssl_certificate_cache: кэш сертификатов и ключей, которые задаются через переменные;
  • ssl_object_cache_inheritable: можно ли при перезагрузке конфигурации переиспользовать уже загруженные сертификаты, ключи и CRL;
  • keepalive_min_timeout: минимальное время, в течение которого keep-alive соединение не закроют раньше срока;
  • исправление установки QUIC-соединения с 0-RTT, ошибка появилась в 1.27.1.

Кэш сертификатов пригодится там, где сертификат подбирается по имени хоста, например ssl_certificate /etc/ssl/$ssl_server_name.crt. Без кэша nginx читает файлы при каждом рукопожатии. По документации ngx_http_ssl_module, по умолчанию кэш выключен, а у директивы есть параметры max, inactive (по умолчанию 10 секунд) и valid (по умолчанию 60 секунд):

ssl_certificate       /etc/ssl/$ssl_server_name.crt;
ssl_certificate_key   /etc/ssl/$ssl_server_name.key;
ssl_certificate_cache max=1000 inactive=20s valid=1m;

Что сделать на сервере

  • Посмотреть версию: nginx -v. Всё ниже 1.26.3 уязвимо к CVE-2025-23419, но обновляться стоит сразу до текущей stable или mainline.
  • После обновления проверить конфигурацию через nginx -t и сделать плавную перезагрузку: systemctl reload nginx.
  • Если на одном IP несколько виртуальных серверов с проверкой клиентских сертификатов, прогнать после обновления сценарии с клиентскими сертификатами.
  • Если сертификаты подставляются через переменные, включить ssl_certificate_cache. Директива есть в mainline с 1.27.4 и в stable-ветках, вышедших после него.

Если сертификаты Let’s Encrypt выпускаются отдельным клиентом, посмотрите и на встроенный модуль ACME, о нём я писал в заметке про nginx 1.29.1 и модуль ACME на Rust.

В итоге 1.27.4 и 1.26.3 закрыли обход проверки клиентских сертификатов через переиспользование TLS-сессии, а mainline получила кэш сертификатов из переменных и keepalive_min_timeout. Сегодня эти версии уже устарели: актуальны 1.30.5 stable и 1.31.6 mainline.

Источники и ссылки


Комментарии загружаются…