На этой неделе разошёлся ролик про безопасность: 15 номеров CVE по PHP, Next.js, Node.js, nginx, GitLab и Java, и у большинства плашка CRITICAL. Я сверил каждый ID с бюллетенем безопасности самого вендора, 25 октября 2026. Все 15 настоящие, включая уязвимость nginx и пару по PHP. Ни одной из 15 нет в каталоге CISA KEV (версия 2026.10.23), а в оценке CISA эксплуатация стоит как «none» для всех, кроме CVE-2026-96889: там отметка «poc».
«Чёрный октябрь» не название кампании. Это несколько обычных бюллетеней безопасности, вышедших почти одновременно: nginx и Next.js 14 октября, GitLab 12 и 21-22 октября, PHP, Node.js и срочное оповещение Oracle по Java 21 октября. Три ярлыка в ролике вводят в заблуждение, и от этого зависит, кому спешить. Ниже: сводная таблица, потом по продукту: как проверить и чем закрыть.
Сводка: кого касается и что ставить#
| Продукт | ID | Реальная серьёзность | Условие | Исправлено в |
|---|---|---|---|---|
| nginx | CVE-2026-15176, CVE-2026-93479, CVE-2026-97205 | F5: CVSS v4 9.2. nginx.org: «Medium» | Конкретный конфиг: alias + rewrite, map с regex-захватами, aio + SSI. Выполнение кода только при отключённом или обойдённом ASLR | 1.30.6 stable, 1.31.7 mainline |
| PHP | CVE-2026-109618, CVE-2026-109619 | CVSS v4 9.2 | 109618: разбор multipart; 109619: два запроса в одном воркере | 8.2.35, 8.3.36, 8.4.27, 8.5.12 |
| Node.js | CVE-2026-111497, 105482, 105483, 106069 | High (оценка Node) | Brotli через node:zlib; проверки имени хоста; TLS к необычным IP-записям | 22.23.4, 24.22.1, 26.12.1 |
| GitLab | CVE-2026-110264, CVE-2026-97229 | CVSS v3.1 10.0 | Свой (self-managed) инстанс, обходного пути нет | 19.5.1 и патчи линеек ниже |
| Java | CVE-2026-91403 | CVSS v3.1 9.1 | TLS-цепочка через скомпрометированные промежуточные CA eMudhra | Alert Oracle, см. Patch Availability Document |
| Next.js | CVE-2026-96889 и два GHSA | CVSS v4 9.5 / 9.5 / 8.2 | См. отдельную статью | 16.4.1, 15.5.28 (последняя 16.4.3) |
Три вводящих в заблуждение ярлыка:
- CVE-2026-96889 в ролике записана на Next.js. Сама CVE описывает use-after-free в librsvg (CNA Red Hat, CVSS v3.1 7.8). Next.js затронут потому, что его оптимизатор картинок использует sharp, а в sharp входит librsvg.
- CVE-2026-111497 — ошибка декодера Brotli (CNA Google, продукт Brotli). До вас она доходит через Node, а Node оценивает её как High, не Critical, и только если вы распаковываете Brotli от недоверенного источника.
- «CRITICAL» у nginx — это оценка F5 по CVSS v4. Проект nginx сам ставит всем трём «Medium».
Уязвимость nginx 2026: три бага, три конфигурации#
Исправлено 14 октября в 1.30.6 (stable) и 1.31.7 (mainline). F5 оценивает их в CVSS v4 9.2 и v3.1 8.1. Выполнение кода требует отключённого или обойдённого ASLR, поэтому nginx.org пишет Medium.
Меня это касается? Только если в конфиге есть триггер. Проверьте версию и пройдитесь grep по полному конфигу:
nginx -v
nginx -T 2>/dev/null | grep -nE 'alias|rewrite|request_filename|aio|ssi|map'- CVE-2026-15176: переполнение буфера при
aliasвместе сrewrite, плюсsetилиreturnс$request_filename, либо$request_filenameвlog_format. До обновления не используйте такое сочетание. - CVE-2026-93479: переполнение буфера при вычислении скрипта, в
mapс регулярным выражением, гдеrootилиlog_formatссылаются на regex-захваты. Затронуты 1.30.0-1.30.5 и 1.31.2-1.31.6. Обход по бюллетеню: именованные захваты, ограниченные блоком. - CVE-2026-97205: use-after-free при
aioвместе с SSIinclude virtual. Отключите aio или SSI.
Как закрыть: обновиться до 1.30.6 или 1.31.7. В том же релизе исправлены CVE-2026-95101 (внедрение в тело запроса HTTP/3) и CVE-2026-97629 (подделка TLS session ticket), так что обновление стоит делать, даже если ваш конфиг обходит все три триггера. Источники: бюллетени на nginx.org и статьи F5 K000162416, K000162607, K000162608.
Уязвимость PHP: два RCE, исправлены 21 октября#
Оба бюллетеня (GHSA-w8hw-w9fx-j79w и GHSA-6wmf-4rv5-p3rp в php/php-src) — CVSS v4 9.2. Исправлено в 8.2.35, 8.3.36, 8.4.27 и 8.5.12.
CVE-2026-109618, «RCE через порчу памяти при OOM». Без аутентификации. Полный RCE подтверждён по HTTP на Apache mod_php, при разборе multipart-тела, до запуска кода приложения. FrankenPHP, вероятно, подвержен. FPM подвержен по анализу исходников, но полного эксплойта не показали. До обновления: консервативный post_max_size, лимит на число частей multipart, блокировка multipart на фронтенде, если загрузок нет, перезапуск воркеров. RLIMIT_AS и RLIMIT_DATA не помогут, это прямо сказано в бюллетене.
CVE-2026-109619, «RCE через устаревшее глобальное состояние». Нужны запрос-производитель и запрос-потребитель в одном воркере. Подтверждено на mod_php через fatal_error_backtraces (PHP 8.5), второй путь идёт через session upload progress. Временные меры: fatal_error_backtraces=0, session.upload_progress.enabled=0, убрать INI-переопределения на уровне запроса вроде PHP_VALUE, перезапустить воркеры.
Проверка: php -v и php -i | grep -E 'post_max_size|upload_progress|fatal_error_backtraces'. Сторонние сообщения о публичном PoC есть, но PHP их не подтверждал.
Обновление безопасности Node.js: 22.23.4, 24.22.1 или 26.12.1#
Вышло 21 октября, страница релиза Node.js. Node 20 снят с поддержки в апреле 2026 и исправлений не получит, так что на 20-й ветке ответ — смена версии, а не патч.
| CVE | Что | Оценка Node | Когда это важно |
|---|---|---|---|
| CVE-2026-111497 | Запись за границы буфера в декодере Brotli | High (в записи CVE: CVSS v4 9.2) | Вы распаковываете Brotli от недоверенного источника через node:zlib |
| CVE-2026-105482 | dns.resolve* обрезает имя на символе NUL | High, 7.4 | Вы проверяете имя хоста по белому списку и потом резолвите его. Временно отклоняйте \0 |
| CVE-2026-105483 | Обход проверки имени хоста в TLS с IP из полноширинных цифр | High, 7.4 | Только Node 24 и 26, 22 не затронут. Клиент ходит на хосты с не-ASCII цифрами |
| CVE-2026-106069 | Обход проверки имени хоста в TLS с IPv4 с ведущим нулём, как 0127.0.0.1 | High, 7.4 | Клиент подключается к неканоническим IPv4-записям |
В том же релизе есть medium-исправления (CVE-2026-105481, смешивание ответов в keep-alive, CVE-2026-106072, CVE-2026-106074), обновление хранилища сертификатов с отзывом доверия к промежуточным CA eMudhra и обновления OpenSSL, c-ares, Undici и SQLite. Чтобы понять, дошло ли это обновление безопасности Node.js до контейнера, node -v на ноутбуке ничего не доказывает. Выполните docker run --rm <image> node -v и пересоберите образ. Образ node:22, который вы тянули месяц назад, содержит старый Node.
Уязвимость GitLab: оценка 10.0 и никакого обхода#
- CVE-2026-110264: целочисленное переполнение в компиляторе регулярных выражений, CVSS v3.1 10.0, без аутентификации «при определённых условиях». Исправлено в 18.11.13, 19.0.10, 19.1.9, 19.2.9, 19.3.6, 19.4.3 и 19.5.1 (патч-релиз 22 октября). Обходного пути нет.
- CVE-2026-97229: целочисленное переполнение в компиляторе regex для CI/CD, CVSS 10.0. Неаутентифицированный специально составленный regex в конфиге CI. Исправлено в 19.2.8, 19.3.5 и 19.4.2 12 октября.
GitLab.com и Dedicated GitLab уже пропатчил. Если вы держите свой инстанс, затронуты вы: версию видно на странице Help или через gitlab-rake gitlab:env:info, обновляйтесь до патча своей линейки. Раз обхода нет, единственная мера до обновления — не держать инстанс открытым в интернет.
Java: оповещение про сертификаты, а не про выполнение кода#
CVE-2026-91403 — внеплановый Oracle Security Alert от 21 октября для Java SE и GraalVM, компонент JSSE, CVSS v3.1 9.1. По тексту оповещения, исправление отзывает доверие к скомпрометированным промежуточным сертификатам eMudhra. Практический риск я читаю так: TLS man-in-the-middle с сертификатом, чья цепочка идёт через эти промежуточные CA, а не удалённое выполнение кода. Это мой вывод, а не формулировка Oracle.
В списке затронутых: Java SE 8u511, 11.0.33, 17.0.21, 21.0.13, 25.0.5, 27.0.1 и GraalVM for JDK 17.0.21 и 21.0.13. Номера исправленных сборок я подтвердить не смог, берите их из Patch Availability Document Oracle. Выполните java -version и сравните. Node выкатил то же изменение по eMudhra в тот же день.
Next.js: три бюллетеня, отдельная статья#
Next.js касаются три бюллетеня: два RCE без аутентификации (в функциях use cache и в Image Optimization API с SVG) и DoS через Server Actions. Исправление — 16.4.1 или 15.5.28, последняя версия 16.4.3. Условия, команды grep и то, что я нашёл на своих серверах, вынесены в отдельный разбор: уязвимость Next.js октября 2026.
Как читать страшный список CVE#
- Смотрите, чья это оценка. Один и тот же баг бывает 9.2 по CVSS v4, 8.1 по v3.1 и «Medium» в таблице самого вендора. В этом месяце пример — nginx. Спросите, кто присвоил число: вендор, CNA или агрегатор.
- Условие читайте раньше балла. «RCE без аутентификации» рядом с «нужны
aioи SSIinclude virtual» или «нужен выключенный ASLR» — совсем другая задача, чем RCE на стандартной установке. - Откройте CISA KEV. Попадание в каталог значит подтверждённую эксплуатацию. Отсутствие — не гарантия, но разница между «патчим на этой неделе» и «патчим сегодня ночью».
- Найдите настоящий компонент. CVE-2026-96889 висела под ярлыком Next.js, а жила в librsvg. Если искать по названию продукта, её пропустишь.
- Посчитайте, что у вас реально стоит. Список из 15 пунктов быстро худеет, когда вычёркиваешь продукты, которых у тебя нет.
Что понадобилось моему стеку#
У меня семь сайтов на Next.js в Docker на одном сервере через Dokploy, впереди Traefik. nginx, PHP, Java и GitLab на сервере нет. Из 15 мне досталось: Next.js, Node.js, sharp и базовые Docker-образы. Итоги аудита (6 из 7 сайтов уязвимы, образ, закреплённый по digest, который заморозил старый патч Node, флаг dangerouslyAllowSVG, который мне не был нужен) разобраны в соседней статье.
Если рядом с приложениями вы держите свою вики или похожие инструменты, к ним применимы те же правила; одну такую установку я описывал в статье ClewWiki как самостоятельно размещаемая вики для команды.



