
Чтобы защитить NGINX от уязвимостей октября 2026 года, обновите его до версии 1.30.6 (stable) или 1.31.7 (mainline) и проверьте конфигурацию на директивы alias, map, aio, ssi, ssl_session_cache и на HTTP/3 (QUIC). Релиз безопасности от 14 октября 2026 года устраняет пять уязвимостей, среди которых возможное удалённое выполнение кода (RCE) и подделка TLS-сессии с обходом проверки клиентских сертификатов (mTLS). Статья рассчитана на администраторов, которые управляют собственными серверами NGINX и обратными прокси (reverse proxy). Все проверки выполняйте только на своих системах или тестовых стендах.

Главное
- Исправлено пять уязвимостей: переполнения буфера (CVE-2026-15176, CVE-2026-93479), внедрение тела запроса в HTTP/3 (CVE-2026-95101), подделка TLS-сессии с обходом клиентских сертификатов (CVE-2026-97629) и use-after-free (CVE-2026-97205).
- Исправленные версии:
1.30.6(stable) и1.31.7(mainline). Дистрибутивные пакеты могут нести исправление под другим номером версии, поэтому сверяйте changelog пакета. - Многое зависит от конфигурации: часть уязвимостей проявляется только при определённых директивах (например,
aliasвместе сrewriteилиaioвместе сssi). Если их нет, это не повод пропускать обновление. - После обновления пакета нужен перезапуск:
reloadперечитывает конфигурацию, но не заменяет бинарный файл работающего master-процесса. Проверьте, какой бинарный файл реально запущен. - Временные меры не заменяют патч: каждая из них имеет ограничения, а по способам обхода в источниках данных нет.
Модель угроз
Нарушитель — внешний неаутентифицированный клиент с сетевым доступом к серверу по HTTP/1.1, HTTP/2, HTTP/3 или TLS. Привилегии на хосте ему не нужны: достаточно отправлять специально сформированные запросы. Последствия, названные в описаниях уязвимостей: аварийное завершение рабочих процессов, повреждение памяти (в источниках упомянута возможность RCE), внедрение постороннего тела запроса в HTTP/3 и обход проверки клиентских сертификатов.
Под угрозой находятся обратные прокси, балансировщики нагрузки, API-шлюзы и сервисы, которые проверяют клиентские сертификаты. Мы предполагаем, что ОС хоста настроена стандартно, а у атакующего нет доступа к закрытым ключам сервера.

Разбор уязвимостей октября 2026 года
В имеющихся материалах нет подтверждения массовой эксплуатации этих уязвимостей. Описания взяты из бюллетеней, а работающие эксплойты в них не приводятся. Точные затронутые версии, условия и меры по каждой CVE сверяйте с карточкой в NGINX Security Advisories и бюллетенем F5.
Для начинающих: если вы не используете перечисленные ниже директивы, часть уязвимостей к вашему серверу не применима. Но обновить NGINX и проверить конфигурацию всё равно нужно.
1. CVE-2026-15176 — переполнение буфера при совместном использовании alias и rewrite.
Проблема возникает, когда директива alias подменяет корневой путь в блоке location и одновременно применяется rewrite. Специально сформированный URI приводит к записи за пределы выделенной памяти.
2. CVE-2026-93479 — переполнение буфера в ngx_http_map_module.
Затрагивает использование директивы map с регулярными выражениями. Повреждается память рабочего процесса.
3. CVE-2026-95101 — внедрение тела запроса в HTTP/3 (QUIC).
Уязвимость связана с обработкой потоков и буферизацией данных в модуле QUIC. По описанию, при proxy_request_buffering on можно внедрить постороннее тело запроса в соединение с бэкендом (HTTP Request Smuggling). Нужна ли для этого именно такая настройка и какие есть обходные меры, уточняйте в advisory.
4. CVE-2026-97629 — подделка TLS-сессии и обход проверки клиентских сертификатов.
Проявляется при ssl_session_cache shared:... без явно заданной директивы ssl_session_ticket_key. При возобновлении сессии клиент без валидного сертификата может пройти проверку ssl_verify_client on, причём недетерминированно. Единичная проверка может его не обнаружить.
5. CVE-2026-97205 — use-after-free при сочетании AIO и SSI.
Возникает, когда одновременно включены асинхронный ввод-вывод (aio on или aio threads) и Server Side Includes (ssi on). Результат — сбой рабочего процесса.
| Уязвимость | Условие по описанию | Основная мера | Временная мера и её ограничения |
|---|---|---|---|
| CVE-2026-15176 | alias и rewrite в одном location |
Обновление до 1.30.6 или 1.31.7 | Переписать конструкцию. alias и root строят путь по-разному, поэтому замену проверяйте на staging: она может изменить маршрутизацию или открыть лишние файлы. Фильтрация длины URI на WAF как самостоятельная мера не подтверждена. |
| CVE-2026-93479 | map с регулярными выражениями |
Обновление | Пересмотреть регулярные выражения в map по рекомендациям advisory. Подтверждённой временной меры в источниках нет. Сокрытие версии (server_tokens off) уязвимость не устраняет. |
| CVE-2026-95101 | HTTP/3 (QUIC), по описанию — proxy_request_buffering on |
Обновление | Отключить HTTP/3 на затронутых виртуальных хостах (убрать quic из listen) и проверить доступность по TCP. Побочный эффект: клиенты перейдут на HTTP/2 или HTTP/1.1. Блокировка только TCP/443 QUIC не останавливает: он работает по UDP. |
| CVE-2026-97629 | ssl_session_cache shared без ssl_session_ticket_key, mTLS |
Обновление | Отключить возобновление сессий (ssl_session_tickets off, ssl_session_cache off). Побочный эффект: растёт нагрузка на CPU из-за полных TLS-рукопожатий. Явный ssl_session_ticket_key — рекомендованная мера, но не замена патчу. |
| CVE-2026-97205 | aio вместе с ssi |
Обновление | Отключить ssi или aio. Побочный эффект: перестанут работать страницы с SSI-вставками или изменится схема дискового ввода-вывода. |
Источник: NGINX Security Advisories, бюллетень F5 K000162613. Способы обхода временных мер в источниках не описаны, поэтому полноценной защитой считайте только обновление.
Что понадобится
- Доступ с правами
rootилиsudoк своим серверам NGINX. - Резервная копия каталога
/etc/nginx/. - Тестовый стенд (staging), максимально близкий к рабочей среде, и один узел за балансировщиком для пилота.
- Знание способа установки: пакет дистрибутива, репозиторий nginx.org или сборка из исходников.
- Первоисточники: nginx.org/2026.html и NGINX Security Advisories.
Шаг 1. Определите версию NGINX и параметры сборки
Проверьте версию на каждом узле, включая контейнеры и образы Docker. Версии 1.30.x относятся к ветке stable, 1.31.x — к mainline.
nginx -v
# Пример вывода: nginx version: nginx/1.30.5
Сравните номер с 1.30.6 (stable) и 1.31.7 (mainline). Версия ниже исправленной требует обновления. Версия новее исправленной тоже подойдёт. Если пакет собран дистрибутивом, исправление может быть перенесено в него без смены номера, поэтому сверяйте changelog (шаг 3).
nginx -V
# Вывод содержит аргументы сборки и подключённые модули
Обратите внимание на --with-http_v3_module (HTTP/3), --with-file-aio и --with-http_ssi_module. Если модуль не собран, связанные с ним сценарии на этом сервере невозможны.
Шаг 2. Найдите в конфигурации директивы, связанные с уязвимостями
Дамп конфигурации может содержать секреты, поэтому сохраняйте его в каталоге с ограниченным доступом, а не в общедоступном /tmp:
sudo install -d -m 700 /root/nginx-audit
sudo sh -c 'umask 077; nginx -T > /root/nginx-audit/nginx_full_dump.conf 2>&1'
# Единый снимок активной конфигурации с учётом всех include
sudo grep -En "(alias|rewrite|map|aio|ssi|quic|http3|proxy_request_buffering|ssl_session_cache|ssl_session_tickets|ssl_session_ticket_key|ssl_verify_client)" /root/nginx-audit/nginx_full_dump.conf
Этот поиск — только инвентаризация. Он не определяет, находятся ли директивы в одном контексте и образуют ли уязвимую комбинацию, а отсутствие совпадений не доказывает безопасность. Для каждой найденной директивы проверьте:
aliasиrewriteвнутри одного блокаlocation;mapс регулярными выражениями;listen ... quicна публичных портах;ssl_session_cache shared:...безssl_session_ticket_keyтам, где используетсяssl_verify_client;aio on(илиaio threads) иssi onв одном виртуальном хосте.
Затронутые виртуальные хосты и location отметьте и сопоставьте с условиями каждой CVE в advisory. После аудита удалите дамп или передавайте его только без секретов.
Шаг 3. Обновите NGINX до 1.30.6 или 1.31.7
Сначала проверьте обновление на staging, затем на одном узле за балансировщиком и только потом раскатывайте на остальные. Для Debian/Ubuntu:
sudo apt-get update && sudo apt-get install --only-upgrade nginx
# Обновляет только пакет NGINX
Для RHEL и производных: sudo dnf upgrade nginx. Если NGINX собран из исходников, пересоберите версию 1.30.6 или 1.31.7 со своими параметрами. Образы контейнеров пересоберите, а зависящие от них сервисы перевыкатите. Общие принципы — в статье об защите корпоративной сети.
Проверьте версию и происхождение установленного пакета, а для дистрибутивных пакетов — changelog на упоминание этих CVE:
nginx -v
apt changelog nginx | head -n 40 # Debian/Ubuntu
rpm -q --changelog nginx | head -n 40 # RHEL и производные
Затем проверьте конфигурацию новым бинарным файлом и перезапустите службу:
sudo nginx -t
sudo systemctl restart nginx
# restart запускает новый бинарный файл; возможен кратковременный разрыв соединений
reload здесь недостаточен: он перечитывает конфигурацию, но не подменяет исполняемый файл уже работающего master-процесса. Если разрыв соединений недопустим, используйте документированную процедуру бинарного обновления NGINX и сначала отработайте её на staging.
Убедитесь, что запущен именно новый бинарный файл. Путь к pid-файлу может отличаться от /run/nginx.pid:
sudo ls -l /proc/$(cat /run/nginx.pid)/exe
ps -o pid,lstart,cmd -C nginx
# Пометка «(deleted)» у exe означает, что процесс работает на старом, уже заменённом файле
Шаг 4. Временные меры, если обновиться пока нельзя
Временные меры снижают риск, но не устраняют уязвимость. Определите срок, к которому их заменит обновление. Применяйте меры в таком порядке:
- CVE-2026-97205: отключите
ssi(ssi off;) илиaioв затронутом хосте. Ограничение: перестанут обрабатываться SSI-директивы в страницах. - CVE-2026-95101: отключите HTTP/3 на затронутых виртуальных хостах, убрав
quicиз директивlisten, и проверьте доступность сервиса по TCP. Директивуproxy_request_buffering offв качестве защиты не используйте: подтверждения, что она закрывает эту уязвимость, в источниках нет. Она меняет передачу тел запросов и может нарушить работу бэкенда. - CVE-2026-15176 и CVE-2026-93479: уберите или перепишите проблемные конструкции (
aliasвместе сrewrite, регулярные выражения вmap) только в нужных блоках и протестируйте на staging. - CVE-2026-97629: отключите возобновление сессий для хостов с mTLS:
# В блоке http файла /etc/nginx/nginx.conf
ssl_session_tickets off;
ssl_session_cache off;
Ограничение: каждое соединение выполняет полное TLS-рукопожатие, поэтому нагрузка на CPU растёт. После изменения проверьте, что клиент без сертификата получает отказ.
Ограничение доступа к уязвимым location на уровне межсетевого экрана или WAF — вспомогательная мера: сигнатурные фильтры не заменяют патч.
Шаг 5. Настройте TLS-сессии для mTLS
Если вам нужен кэш сессий, задайте явный ключ билетов. Создайте каталог и файл с ограниченными правами; перенаправление > выполняется оболочкой пользователя, а не sudo, поэтому используйте tee:
sudo install -d -o root -g root -m 700 /etc/nginx/ssl
umask 077
openssl rand 80 | sudo tee /etc/nginx/ssl/session_ticket.key >/dev/null
sudo chmod 600 /etc/nginx/ssl/session_ticket.key
Ключ читает master-процесс NGINX, который обычно запускается от root. Проверьте это с помощью nginx -t. Затем добавьте ключ в блок server с mTLS (фрагмент конфигурации):
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_client_certificate /etc/nginx/ssl/ca.crt;
ssl_verify_client on;
ssl_session_cache shared:SSL_EXTERNAL:10m;
ssl_session_timeout 1h;
ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ssl/session_ticket.key;
}
Это конфигурация, для которой в описании CVE-2026-97629 нет условия проявления, но она не заменяет исправленную сборку. Гарантий полного устранения уязвимости одной директивой источники не дают. Если безопасность такой конфигурации подтвердить не удаётся, отключите возобновление сессий (шаг 4) и обновитесь. Ключ билетов регулярно ротируйте: при утечке файла можно расшифровать записанный трафик сессий, использовавших эти билеты. Не полагайтесь только на факт TLS-сессии при авторизации в приложении.
Проверка результата
1. Версия и запущенный бинарный файл. Выполните nginx -v, убедитесь, что версия не ниже 1.30.6 (stable) или 1.31.7 (mainline) либо что исправление указано в changelog пакета. Затем проверьте, что процесс запущен из нового файла (шаг 3).
2. Отказ клиенту без сертификата на своём стенде. Запрос по IP-адресу может попасть в виртуальный сервер по умолчанию, а не в проверяемый. Поэтому направьте запрос на нужное имя:
curl --resolve example.com:443:203.0.113.10 -sS -o /dev/null -w '%{http_code}\n' https://example.com/api/secure
# Ожидаемо при ssl_verify_client on: 400 (No required SSL certificate was sent)
Убедитесь по access- и error-логам, что запрос попал в нужный виртуальный хост. Отдельно проверьте, что запрос с допустимым клиентским сертификатом проходит. Из-за недетерминированного характера CVE-2026-97629 повторите проверку несколько раз.
3. HTTP/3 и обычные локации. После обновления или отключения QUIC проверьте ответы, коды и логи по HTTP/3 (если он включён) и по TCP.
Для проверки внешнего периметра используйте методику из статьи как проверить безопасность своего сайта.
Порядок внедрения в организации
- Инвентаризация: версии NGINX на физических и виртуальных серверах, в Kubernetes Ingress и контейнерах.
- Staging: обновление и проверка регрессии, особенно mTLS и маршрутов с
alias. - Пилот: один узел за балансировщиком, наблюдение за логами ошибок.
- Раскатка: остальные узлы последовательно в окне обслуживания, затем проверка запущенного бинарного файла на каждом.
Обнаружение и реагирование на инциденты
Специфичных для этих уязвимостей сигнатур атак в источниках нет, поэтому ориентируйтесь на косвенные признаки.
sudo grep -E "exited on signal|segmentation fault" /var/log/nginx/error.log
dmesg -T | grep -i nginx
Записи вида worker process [pid] exited on signal 11 говорят только о сбое рабочего процесса. Они не доказывают эксплуатацию конкретной CVE: причиной может быть любая другая ошибка. Сопоставляйте такие записи с версией NGINX, конфигурацией, временем и сетевыми журналами. Выводы о RCE или конкретной уязвимости делайте только после анализа core dump и других артефактов.
Для mTLS полезно писать в access-лог значение $ssl_client_verify и искать успешные запросы к защищённым путям без успешной проверки сертификата. Журналы лучше хранить вне сервера.
При множественных падениях worker-процессов выведите хост из пула балансировки. Сохраните журналы и при необходимости core dump для анализа, ограничив к нему доступ: в дампе могут быть секреты. Затем примените временные меры или обновление.
Ограничения и остаточные риски
- Обновление закрывает только эти пять уязвимостей. Ошибки в бэкенде и приложениях остаются, если они не проверяют входные данные.
- Статический ключ билетов нужно ротировать. Утечка ключа позволяет расшифровать записанный трафик сессий, использовавших эти билеты.
- Фильтры WAF не заменяют патч. Подтверждения, что сигнатуры закрывают эти CVE, в источниках нет; о методах обхода WAF — в материале о методах взлома современных Firewall.
- Данные о затронутых версиях неполны. Точные диапазоны версий и условия сверяйте с карточками advisory.
Что не вошло в материал
Мы не рассматривали сторонние динамические модули (например, PageSpeed) и пользовательские Lua-скрипты: их совместимость с обновлённым ядром NGINX нужно проверять отдельно.
Ключевые цифры
Источники: NGINX Security Advisories, бюллетень F5 K000162613.
Что это значит: наши выводы
- 1 хорошая новость
- 1 риск
- 1 за чем следить
- 1 что сделать
- Хорошая новостьИсправления уже вышли
Версии 1.30.6 и 1.31.7 закрывают все пять уязвимостей для обеих поддерживаемых веток.
- РискНедетерминированный обход mTLS
CVE-2026-97629 проявляется не при каждой попытке, поэтому единичная проверка может его не выявить. Проверяйте несколько раз и не откладывайте обновление.
- За чем следитьПадения worker-процессов
Сообщения о сигнале 11 в
error.log— неспецифичный индикатор. Сопоставляйте их с версией, конфигурацией и сетевыми журналами. - Что сделатьОбновить и перезапустить
Обновите пакет, выполните
nginx -t, перезапустите службу и убедитесь, что запущен новый бинарный файл.
Частые вопросы
Нужно ли обновляться, если мы не используем HTTP/3 и mTLS?
Да. Часть уязвимостей не связана с этими функциями: они зависят от alias с rewrite, от map и от сочетания AIO и SSI. Проверить конфигурацию и обновиться проще, чем гадать о применимости.
Чем отличаются версии 1.30.6 и 1.31.7?
Это исправленные версии двух разных веток: 1.30.6 — stable, 1.31.7 — mainline. Обе содержат исправления, поэтому обновляйтесь в рамках той ветки, на которой работает ваш сервер.
Достаточно ли отключить опасные директивы вместо обновления?
Только как временная мера. Конкретные ограничения каждой меры описаны в таблице, а способы обхода в источниках не раскрыты. Основная мера — обновление.
Как узнать, затронут ли мой дистрибутивный пакет?
Сверьте changelog пакета (apt changelog nginx или rpm -q --changelog nginx) и сведения о CVE у поставщика дистрибутива: исправление может быть перенесено в пакет без смены номера версии.
Можно ли проверять эти уязвимости на чужих серверах?
Нет. Проверки допустимы только на собственных системах или тестовых стендах, чтобы найти проблемные места и закрыть их.
Первоисточники
Материал подготовлен на основе бюллетеней NGINX и F5 и актуален на дату обновления. Применяйте инструкции и проверки только на своих серверах или с разрешения их владельца.
Источник: NGINX Security Advisories, F5