opened image

nginx: пять уязвимостей, одной из которых 21 год. Как обновить веб-сервер

 

 

14 октября 2026 года вышли nginx 1.30.6 и 1.31.7. Они закрывают пять уязвимостей. Три из них могут привести к запуску чужого кода на сервере. Одна ошибка жила в nginx с 2005 года.

Уязвимости срабатывают не на всех серверах, а только при определённых настройках. Разбираться в настройках долго, а обновиться можно за 5 минут. Поэтому наш совет простой: обновите nginx. Ниже инструкция.

 

 

Что такое nginx

 

nginx это администратор на ресепшене гостиницы. Каждый посетитель сайта сначала попадает к нему. Администратор решает, куда его отправить: выдать готовую страницу, передать запрос PHP или Node.js, отдать картинку.

nginx стоит на огромном числе серверов в мире. Часто его ставят, даже не зная об этом: он идёт в комплекте с панелями управления вроде ISPmanager, FastPanel, HestiaCP, aaPanel. Если у вас есть сайт на VPS, очень вероятно, что перед ним стоит nginx.

Если с администратором что-то не так, страдает вся гостиница.

 

 

Что случилось

 

В nginx нашли пять ошибок. Каждая срабатывает только при определённой настройке. Это как замок, который ломается, только если дверь открывают определённым ключом и при этом держат ручку нажатой.

 

Уязвимость

Что может случиться

Когда опасно

Оценка

CVE-2026-15176

Сбой, возможен запуск чужого кода

При определённом сочетании директив. Ошибка есть во всех версиях с 2005 года

9.2

CVE-2026-97205

Сбой, возможен запуск чужого кода

Включено aio и используются SSI-страницы с include virtual

9.2

CVE-2026-93479

Сбой, возможен запуск чужого кода

В map используются регулярные выражения, а их части берутся в root или log_format

9.2

CVE-2026-97629

Может пропустить проверку клиентского сертификата

Общий кэш TLS-сессий без явно заданного ключа

8.3

CVE-2026-95101

В запрос к сайту могут попасть лишние данные

Включён HTTP/3

6.9

 

Три первые ошибки работают с памятью. Представьте склад, где кладовщик путает полки и кладёт коробку туда, где уже лежит другая. Иногда он просто роняет всё на пол, и nginx падает. А иногда злоумышленник может подсунуть свою «коробку» с кодом.

Ошибка с сертификатами опасна для тех, кто пускает пользователей по специальному сертификату вместо пароля. В некоторых случаях nginx мог пропустить человека без проверки.

 

 

Кого это касается

 

Почти всех, у кого стоит nginx версии ниже 1.30.6 или 1.31.7. Одна из ошибок есть во всех версиях начиная с 0.1.29. Это 2005 год.

 

Что важно знать:

  • Панели управления. ISPmanager, FastPanel, HestiaCP, aaPanel и другие ставят nginx сами. Его тоже нужно обновить, даже если вы его не настраивали.
  • Docker. Если сайт работает в контейнере на образе nginx, обновление сервера контейнер не затронет. Образ нужно пересобрать.
  • Ingress в Kubernetes. Если вы используете ingress-nginx, проверьте, что его версия собрана на исправленном nginx.

 

Атак через эти уязвимости пока не зафиксировано. Но исправления вышли две недели назад, и подробности уже опубликованы. Обычно после этого атаки не заставляют себя ждать.

 

 

Узнайте версию

 

nginx -v

 

Ответ будет вида nginx version: nginx/1.30.4. Безопасные версии: 1.30.6 и выше на стабильной ветке или 1.31.7 и выше на основной.

Если nginx установлен из пакетов Ubuntu, Debian, AlmaLinux. Системы часто встраивают исправление в старую версию. Номер не меняется, а дыра закрыта. Проверить можно по журналу изменений пакета.

 

Для Ubuntu и Debian:

apt changelog nginx 2>/dev/null | grep -E 'CVE-2026-(15176|97205|93479)'

 

Для AlmaLinux и Rocky Linux:

rpm -q --changelog nginx | grep -E 'CVE-2026-(15176|97205|93479)'

 

Если команда вывела строки с номерами CVE, исправление установлено. Если ответ пустой, переходите к шагу 2.

 

 

Обновите nginx

 

Ubuntu и Debian:

sudo apt update
sudo apt install --only-upgrade nginx

 

AlmaLinux и Rocky Linux:

sudo dnf upgrade nginx

 

Панели управления. Обновите систему или nginx через раздел обновлений в панели. Панель может держать свою сборку nginx, поэтому после обновления проверьте версию ещё раз.

 

Docker. Поменяйте версию в Dockerfile или docker-compose.yml, например на nginx:1.30.6, и пересоберите:

docker compose build --pull
docker compose up -d

 

Проверьте и перезапустите

 

Сначала убедитесь, что в настройках нет ошибок:

sudo nginx -t

 

Если увидели syntax is ok и test is successful, перезапустите nginx:

sudo systemctl restart nginx

 

Именно restart, а не reload. Команда reload перечитывает только настройки, а старая программа продолжает работать. Это как выдать администратору новую инструкцию, но оставить за стойкой того же человека. Сайты будут недоступны около секунды.

После перезапуска снова выполните nginx -v и откройте сайты в браузере.

 

 

Если обновиться прямо сейчас нельзя

 

Бывает, что nginx нельзя трогать до выходных. Тогда можно временно убрать настройки, при которых срабатывают уязвимости. Это не замена обновлению, а пластырь до визита к врачу.

 

Сначала посмотрите, какие настройки у вас есть:

sudo nginx -T 2>/dev/null | grep -nE '^\s*(aio|ssi|ssl_session_cache|ssl_session_ticket_key|http3|map)\b'

 

Дальше по найденному:

Нашли

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

aio on и ssi on

Выключите aio или не отдавайте SSI-страницы

map с регулярными выражениями

Используйте именованные группы и только внутри блока с совпадением

ssl_session_cache shared без ssl_session_ticket_key

Уберите общий кэш или задайте ключ из файла через ssl_session_ticket_key

http3 on

Добавьте proxy_request_buffering off; или временно выключите HTTP/3

После изменений снова выполните sudo nginx -t и sudo systemctl reload nginx. Здесь reload подходит, потому что меняются только настройки.

Если не уверены, что делаете, лучше не трогайте настройки и обновите nginx при первой возможности. Неправильная правка может уронить все сайты на сервере.

 

 

Чек-лист

  • Узнал версию nginx командой nginx -v
  • Проверил журнал изменений пакета, если версия старая
  • Обновил nginx через пакеты, панель или Docker
  • Проверил настройки командой nginx -t
  • Перезапустил nginx через restart, а не reload
  • Убедился, что версия 1.30.6 или 1.31.7 и выше
  • Проверил, что все сайты открываются

 

Не хотите разбираться сами?

 

nginx держит на себе все сайты сервера. Одна опечатка в настройках, и не открывается ни один. А если nginx стоит внутри панели или в Docker, непонятно, где именно его обновлять.

Для таких случаев у Zomro есть два варианта.

 

SOD: обновим nginx за вас

 

Наш системный администратор:

  • найдёт, откуда установлен nginx: из пакетов, панели или Docker;
  • обновит его до безопасной версии;
  • проверит настройки на опасные сочетания директив;
  • убедится, что все сайты работают после перезапуска.

Стоимость: €12.50 за каждые 15 минут работы.

 

Заказать обновление nginx

 

Premium: быстрая помощь, когда она нужна

 

Если после обновления сайты не открываются, каждая минута стоит денег. По обычному техническому запросу ответ может занять до 10 часов. С Premium мы отвечаем за время от 5 до 30 минут.

Новые уязвимости появляются каждую неделю. С Premium вам не придётся разбираться с ними в одиночку.

 

Подключить Premium