The post has been translated automatically. Original language: Russian
On September 15, 2026, two versions of the nginx web server were released at once: 1.30.5 in the stable branch and 1.31.6 in the main branch. Both solve the same security problem — buffer overflow in the dynamic memory of the workflow when working over the HTTP protocol./3. The vulnerability has been assigned the identifier CVE-2026-90439, the danger level according to the classification of developers is medium. Versions 1.29.2 to 1.31.5 inclusive are affected, the fix is included in 1.30.5 and 1.31.6.
What is the essence of the defect?
The wording from the list of changes is specific: overflow of the memory buffer in the heap can occur in the workflow under certain configurations when HTTP/3 is used and the build works with OpenSSL version 3.5.0 or earlier. To get into the risk zone, two conditions are needed at once — HTTP/3 enabled and a cryptographic library no older than the specified version.
It's about a workflow that serves client connections. Damage to the heap in it is, at best, an emergency shutdown of the process and a break in its connections, at worst, the ground for more serious consequences. The master process restarts the fallen worker, so outwardly everything may look like rare unexplained falls without any connection with the load.
Change in the processing of QUIC transport parameters
Along with the fix, the behavior has changed in both versions: the QUIC transport parameter extension received in the SSL connection is now always ignored. This is not a setting or a flag, the behavior has been changed unconditionally. Those who build their own QUIC schemes on top of nginx should check the stands after the update.
What else has been fixed in the main branch?
Version 1.31.6, in addition to the security fix, brought several fixes:
- the binary update of the executable file refused to work if the socket of the control API was set, and the new file was built with a module for the Perl language.;
- the error in calculating the predicate in the predicate location was silently ignored, and the predicate was treated as false.;
- An error with nested location search could also be ignored if locations specified by regular expressions or predicates are configured at the current level.;
- when reading the configuration, a failure could occur with access to an invalid address if the geo directive with the ranges parameter was used, and the binary file of the database was corrupted.
Two weeks earlier, on September 2, 2026, the main branch received version 1.31.5 with a notable set of innovations: a control API, predicate locations, a module for working with the JSON format, and an early reading directive for the request body. Part of the fixes in 1.31.6 is to polish exactly that. There are no such features in the stable branch 1.30.x, only fixes get there.
What does this mean in practice?
The first is to look at the actual configuration: is the QUIC or HTTP/3 protocol declared somewhere in listen, and which version of OpenSSL your binary is built with. The assembly parameters are output by nginx itself using the detailed version output key. The version of the encryption library in case of vulnerability is the one with which the executable file is assembled, and not the one that lies in the system next to it: in distribution packages and container images, these things often differ.
The second is the branch selection. If you are on stable 1.30.x, the right step is 1.30.5, without the temptation to jump to the main branch for the sake of new directives: the management API and predicate locations live in the prod for a few weeks, and the list of fixes in 1.31.6 clearly shows this. If you are already on the main branch and use predicate locations, it is worth updating all the more: a silently false predicate in case of a calculation error is an incorrect routing of requests, which is difficult to notice from the logs.
Third— those who have not even reached 1.30.4 dated July 15, 2026, need to update first: three security issues are closed there — in the map directive with regular expressions, in the range slicing module and in the server inclusion filter. And the general rule is to re-read the configuration in advance on the test node, and not at the time of restarting the combat server.
The draft text was prepared with the participation of AI, the facts were checked against the original source — the official nginx changelogs and the project security bulletin.
15 сентября 2026 года вышли сразу две версии веб-сервера nginx: 1.30.5 в стабильной ветке и 1.31.6 в основной. Обе закрывают одну и ту же проблему безопасности — переполнение буфера в динамической памяти рабочего процесса при работе по протоколу HTTP/3. Уязвимости присвоен идентификатор CVE-2026-90439, уровень опасности по классификации разработчиков — средний. Затронуты версии с 1.29.2 по 1.31.5 включительно, исправление вошло в 1.30.5 и 1.31.6.
В чём суть дефекта
Формулировка из списка изменений конкретна: переполнение буфера памяти в куче может произойти в рабочем процессе при определённых конфигурациях, когда используется HTTP/3 и сборка работает с OpenSSL версии 3.5.0 или более ранней. Для попадания в зону риска нужны два условия сразу — включённый HTTP/3 и криптографическая библиотека не старше указанной версии.
Речь о рабочем процессе, который обслуживает клиентские соединения. Повреждение кучи в нём — это в лучшем случае аварийное завершение процесса и обрыв его соединений, в худшем — почва для более серьёзных последствий. Мастер-процесс перезапускает упавший воркер, поэтому внешне всё может выглядеть как редкие необъяснимые падения без связи с нагрузкой.
Изменение в обработке транспортных параметров QUIC
Вместе с исправлением в обеих версиях изменилось поведение: расширение транспортных параметров QUIC, полученное в SSL-соединении, теперь всегда игнорируется. Это не настройка и не флаг, поведение изменено безусловно. Тем, кто строит поверх nginx собственные схемы работы с QUIC, стоит проверить стенды после обновления.
Что ещё поправили в основной ветке
Версия 1.31.6, помимо исправления безопасности, принесла несколько починок:
- бинарное обновление исполняемого файла отказывалось работать, если был задан сокет управляющего API, а новый файл собран с модулем для языка Perl;
- ошибка при вычислении предиката в предикатной локации молча игнорировалась, и предикат трактовался как ложный;
- ошибка при вложенном поиске локации тоже могла быть проигнорирована, если на текущем уровне настроены локации, заданные регулярными выражениями или предикатами;
- при чтении конфигурации мог произойти отказ с обращением по недопустимому адресу, если использовалась директива geo с параметром ranges, а бинарный файл базы оказался повреждён.
Двумя неделями раньше, 2 сентября 2026 года, основная ветка получила версию 1.31.5 с заметным набором нововведений: управляющий API, предикатные локации, модуль для работы с форматом JSON и директива раннего чтения тела запроса. Часть исправлений в 1.31.6 — шлифовка именно этого. В стабильной ветке 1.30.x таких возможностей нет, туда попадают только исправления.
Что это значит на практике
Первое — посмотреть фактическую конфигурацию: объявлен ли где-нибудь в listen протокол QUIC или HTTP/3 и какой версией OpenSSL собран ваш бинарник. Сборочные параметры выводит сам nginx по ключу подробного вывода версии. Версия библиотеки шифрования в условии уязвимости — та, с которой собран исполняемый файл, а не та, что лежит в системе рядом: в дистрибутивных пакетах и контейнерных образах эти вещи часто расходятся.
Второе — выбор ветки. Если вы на стабильной 1.30.x, правильный шаг — 1.30.5, без соблазна перепрыгнуть на основную ветку ради новых директив: управляющий API и предикатные локации живут в проде считанные недели, и список исправлений в 1.31.6 это наглядно показывает. Если вы уже на основной ветке и пользуетесь предикатными локациями, обновиться стоит тем более: молча ложный предикат при ошибке вычисления — это неверная маршрутизация запросов, которую тяжело заметить по логам.
Третье — тем, кто не дошёл даже до 1.30.4 от 15 июля 2026 года, обновляться нужно в первую очередь: там закрыты три проблемы безопасности — в директиве map с регулярными выражениями, в модуле нарезки диапазонов и в фильтре серверных включений. И общее правило: перечитать конфигурацию заранее на тестовом узле, а не в момент перезапуска боевого сервера.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные списки изменений nginx и бюллетень безопасности проекта.