Уязвимость в Node.js и Brotli (Node2Shell): как проверить сайт

Уязвимость Node2Shell (CVE-2026-111497) в Node.js и Brotli: кого она касается, как проверить сайт без программиста, версии с исправлением и что поручить хостингу.

Иллюстрация: серверный шкаф, сжатый пакет данных с трещиной, а также щит и пластырь, символизирующие исправление безопасности
Иллюстрация создана ИИ

Актуально на 1 ноября 2026 г. Проект Node.js выпустил 21 октября исправления безопасности, среди которых исправление уязвимости CVE-2026-111497, получившей название Node2Shell. Ошибка находится в Brotli — библиотеке для распаковки сжатых данных, которая встроена в Node.js. 27 октября американское агентство CISA добавило эту уязвимость в каталог уязвимостей, эксплуатируемых в атаках.

Без паники: большинство сайтов малых компаний работает на WordPress или представляет собой обычные HTML-файлы, и Node.js на сервере у них нет. Однако если Ваш сайт, магазин или клиентская панель работает на Next.js, Nuxt или Express, проверьте это ещё сегодня. В этой статье я показываю, как за несколько минут выяснить, касается ли Вас уязвимость, в каких версиях есть исправление и что написать хостингу или исполнителю сайта.

Что произошло

Brotli — это способ сжатия данных, немного похожий на упаковку файлов в ZIP, разработанный Google и используемый по всему интернету. В библиотеке Brotli версий с 1.0.3 по 1.2.0 есть ошибка: специально подготовленные сжатые данные при распаковке могут записаться за пределами области памяти, которую программа для них выделила. Результатом может стать сбой приложения, утечка данных из памяти сервера, а в худшем случае — выполнение чужого кода с правами Вашего приложения.

Важнейшие даты:

  • 21 октября 2026 г.: Node.js и Google выпустили исправления (Brotli 1.0.10, 1.1.1 и 1.2.1).
  • 23–26 октября 2026 г.: исправленные пакеты библиотеки выпустили Debian (DSA-6582-1) и Ubuntu (USN-8956-1), а 25 октября Microsoft вне обычного графика выпустил исправления для .NET.
  • 27 октября 2026 г.: CISA добавила уязвимость в каталог Known Exploited Vulnerabilities, то есть уязвимостей, эксплуатируемых на практике.

Что касается начала атак, источники расходятся. По сообщениям от 22 октября, известных атак ещё не было. Компании, отслеживающие трафик в сети, описывают сканирование и первые попытки в период с 25 по 27 октября, а CISA подробностей не привела. Часть наблюдавшихся попыток была неудачной, но даже неудачная попытка может вывести приложение из строя. Поэтому считайте это обновление срочным.

Кого касается уязвимость в Node.js

Уязвимость касается программ, которые распаковывают данные Brotli, полученные от кого-то постороннего. На практике это означает:

  • сайты, магазины и приложения, работающие на сервере с Node.js: Next.js, Nuxt, Express и другие. В Node.js Brotli встроен, поэтому важна версия самого Node.js, а не пакетов npm;
  • приложения, принимающие сжатые запросы: например, Express 5 (через body-parser 2.x) по умолчанию распаковывает тело запросов, сжатое Brotli;
  • приложения, получающие данные с чужих серверов: встроенный fetch(), интеграции, загрузка изображений с других адресов. Vercel указывает здесь, например, оптимизацию изображений в самостоятельно размещённом Next.js;
  • другие программы с библиотекой Brotli: .NET 8, 9 и 10 (Microsoft отмечает, что распаковка Brotli там по умолчанию не включена), Bun, Envoy и системные пакеты libbrotli в Linux.

Кого уязвимость напрямую не касается:

  • статические сайты, то есть готовые HTML-файлы, например из конструктора или из Next.js, экспортированного в файлы. Node.js в этом случае работает только на компьютере, где сайт собирается, а не на сервере;
  • WordPress и другие сайты на PHP, поскольку они не работают на Node.js. Однако на сервере может быть системная библиотека Brotli, поэтому обновление системы всё равно нужно. Это задача хостинга.

Одно пояснение, потому что это частый вопрос: сжатие Brotli, которым сервер упаковывает страницы, отправляемые браузерам, — это не та уязвимость. Ошибка касается распаковки данных от посторонних. Не отключайте сжатие: сайт замедлится, а проблему это не решит.

В каких версиях Node.js есть исправление

Актуально на 1 ноября 2026 г. по сообщению Node.js от 21 октября и списку выпусков Node.js:

Линия Node.js Поддержка Что делать
26.x да (LTS) обновить до 26.12.1 или новее
24.x да (LTS) обновить до 24.22.1 или новее
22.x да (LTS) обновить до 22.23.4 или новее
25.x, 23.x, 20.x и старше нет исправления не будет: перейти на 22.x, 24.x или 26.x

Линии без поддержки уязвимы и исправления не получат. Node.js прямо пишет, что версии после окончания поддержки всегда затронуты уязвимостями из последующих выпусков безопасности. После 21 октября уже вышли новые выпуски: 24.22.2 (27 октября) и 26.13.0 (28 октября, начиная с этой версии линия 26.x получила статус LTS). Они содержат то же исправление, а перед обновлением всё равно проверьте последнюю версию на сайте nodejs.org.

Тот же выпуск исправляет ещё девять других ошибок, в том числе в проверке сертификатов TLS. Одно обновление решает всё.

Как проверить, подвержен ли Ваш сайт риску

Без программиста: 5 минут

  1. Код страницы. Откройте сайт в браузере, нажмите Ctrl+U (просмотр исходного кода), затем Ctrl+F и введите _next. Если есть результаты, сайт построен на Next.js. Для Nuxt ищите _nuxt. Это ещё не доказывает, что на сервере работает Node.js, но говорит, что стоит спрашивать дальше.
  2. Заголовки. Нажмите F12, перейдите на вкладку Сеть (Network), обновите страницу и щёлкните первую строку. В заголовках ответа найдите x-powered-by. Значение Next.js или Express означает Node.js на сервере. Отсутствие этого заголовка ничего не доказывает, потому что многие исполнители его скрывают.
  3. Панель хостинга. Если сайт размещён на Vercel, версию Node.js видно в настройках проекта. В панелях хостинга с поддержкой приложений Node.js версия обычно указана у приложения.
  4. Спросите исполнителя. Это самый быстрый и надёжный способ. Готовое сообщение Вы найдёте ниже.

Для того, кто занимается развёртыванием

Проверьте версию везде, где работает код: на сервере, в каждом контейнере, в тестовой среде и в CI.

# версия Node.js
node -v

# версия Node.js в образе Docker
docker run --rm <image> node -v

# Debian и Ubuntu: версия системной библиотеки Brotli
dpkg -l | grep -i brotli

Три ловушки:

  • Образы Docker, собранные до 21 октября, содержат старую версию, пока Вы не пересоберёте их из нового базового образа.
  • Node.js из системных пакетов может использовать системную библиотеку libbrotli. Сравните её версию с трекером Debian или сообщением Ubuntu USN-8956-1.
  • Работающий процесс использует старую версию, пока Вы не перезапустите его.

Что сделать сегодня

  1. Выясните, есть ли у Вас Node.js на сервере (предыдущий раздел). Если нет, переходите к пункту 6.
  2. Сделайте резервную копию кода, базы данных и конфигурации. Как сделать её как следует, я описываю в статье о резервной копии сайта и правиле 3-2-1.
  3. Обновите Node.js до версии из таблицы в рамках той же линии. Такое обновление обычно не требует изменений в коде.
  4. Перезапустите приложение или разверните его заново, а образы Docker пересоберите. На Vercel для проектов на 22.x и 24.x достаточно повторного развёртывания.
  5. На Node.js 20.x или другой линии без поддержки не ждите исправления, потому что его не будет. Перейдите на 22.x, 24.x или 26.x: сначала на тестовой копии, потом на сайте, в ближайшие дни.
  6. Спросите хостинг об обновлении системных пакетов Brotli, в том числе если у Вас WordPress.

Если обновление должно подождать несколько дней, компании, занимающиеся безопасностью (в том числе Aikido и ELLIO), советуют временно отклонять входящие запросы, сжатые Brotli (заголовок Content-Encoding: br), на прокси-сервере, файрволе или в самом приложении. Это защита лишь на время: она не защищает от данных, получаемых с чужих серверов, и не заменяет обновление. Vercel 21 октября включил для всех проектов правила файрвола против этой уязвимости, но сам отмечает, что они не заменяют обновление Node.js.

После обновления попросите просмотреть логи с 21 октября: не перезапускалось ли приложение необычно часто и не появились ли незнакомые файлы, процессы или учётные записи. Если что-то вызывает сомнения, сообщите об инциденте в CERT Polska (польская группа реагирования на компьютерные инциденты).

Что поручить хостингу или исполнителю сайта

Кто обновляет Node.js, зависит от того, где работает сайт:

Где работает сайт Кто обновляет Node.js Ваша роль
Vercel и подобные платформы поставщик, по собственному графику проверить сообщение поставщика, убедиться, что используется линия 22.x или новее, и что выполнено повторное развёртывание
Хостинг с панелью и приложением Node.js обычно исполнитель, который выбирает версию в панели спросить исполнителя
VPS или собственный сервер администратор или исполнитель убедиться, что это входит в чьи-то обязанности

Готовое сообщение для копирования:

Здравствуйте, 21 октября Node.js выпустил исправления безопасности, в том числе исправление уязвимости CVE-2026-111497 (Node2Shell, Brotli). Прошу сообщить:

  1. Работает ли наш сайт или приложение на сервере с Node.js, и если да, то в какой версии?
  2. Обновлён ли Node.js до версии 22.23.4, 24.22.1, 26.12.1 или новее и перезапущено ли приложение?
  3. Обновлены ли на сервере системные пакеты Brotli?
  4. Видно ли в логах с 21 октября что-либо тревожное? Благодарю и прошу ответить в течение 2 рабочих дней.

Если исполнитель не отвечает или у сайта нет никого, кто следит за обновлениями, это сигнал, что нужно навести порядок. Я могу взять сайт на техническую поддержку, а если Вы предпочитаете, чтобы он работал на сервере, которым занимаюсь я сам, обеспечу также домен и хостинг (от 390 зл/год без НДС, сервер в Польше или ЕС).

Версии без поддержки: урок на будущее

Node.js 20.x не получил исправления, потому что его поддержка уже закончилась. Это тот же механизм, что и с PHP: о конце поддержки PHP 8.2, который наступает 31 декабря 2026 г., я писал недавно. Версия без поддержки работает как обычно до того дня, когда появляется уязвимость. Тогда вместо простого обновления Вас ждёт переезд на более новую версию под давлением времени.

Поэтому раз в квартал проверяйте три вещи:

  • на какой версии Node.js или PHP работает сайт и до какого срока у неё есть поддержка,
  • у кого по договору есть обязанность обновлять и за какое время он реагирует на срочные уязвимости,
  • можно ли действительно восстановить резервную копию.

В ближайшие дни в серии «Уязвимости» я опишу, среди прочего, октябрьские исправления в Next.js и React, а также то, кто отвечает за обновления: хостинг, исполнитель или владелец компании.

Итог

Node2Shell — серьёзная уязвимость, но для большинства компаний исправление простое: обновить Node.js до версии 22.23.4, 24.22.1, 26.12.1 или новее и перезапустить приложение. Больше всего работы у сайтов на Node.js 20.x и других линиях без поддержки, потому что там нужно перейти на более новую линию. Если Вы не знаете, на чём работает Ваш сайт, отправьте исполнителю сообщение из этой статьи ещё сегодня.

Если обновлениями Вашего сайта никто не занимается, напишите мне. В рамках технической поддержки я слежу за сайтом, делаю резервные копии и устанавливаю обновления безопасности. На выбор три пакета: «Дежурство» от 149 зл/мес. без НДС (срочные обновления за 2 дня), Standard от 349 зл/мес. без НДС (реакция в течение 1 рабочего дня) и Pro от 749 зл/мес. без НДС (реакция в течение 4 часов). Аудит безопасности (от 990 зл без НДС) покажет, что ещё требует исправления. Отвечаю в течение 24 часов, а новые клиенты получают скидку 20% на первый заказ.

Частые вопросы

Связанные услуги

Есть похожий проект?

Опишите, что Вам нужно, и в течение 24 часов я пришлю оценку. Новые клиенты получают скидку 20% на первый заказ.

Рассчитать проектЗаписаться на звонок (20 мин)

Читайте также

Сайты1 ноября 2026 г.9 мин чтения

Сайт для ресторана: меню и онлайн-заказы

Что нужно сайту ресторана и пиццерии: меню в виде текста, 14 аллергенов при онлайн-заказах, собственные заказы наряду с порталами и профиль компании в Google.