# Node2Shell: что владельцам сайтов нужно проверить сейчас

> Node2Shell затрагивает декодер Brotli в Node.js. Рассказываем, в каких релизах устранена уязвимость и что следует попросить Hoster подтвердить для работающей системы.

- Quelle: https://bezahlbare-webseite.de/ru/ratgeber/node2shell-nodejs-brotli-luecke-was-tun/
- Datum: 2026-10-23
- Sprache: ru
- Thema: Technik & Sicherheit

Node2Shell — серьёзная уязвимость в декодере Brotli, с помощью которого Node.js распаковывает сжатые данные. Манипуляции с входными данными могут повредить память и при определённых условиях привести к выполнению стороннего кода. Важно выяснить, обрабатывает ли такие данные неисправленная среда Node.js. Попросите Hoster или разработчика проверить фактически работающий экземпляр приложения и обновить затронутые среды выполнения. По состоянию на 23 октября 2026 года.

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

CVE-2026-111497 затрагивает декодер Brotli, который использует Node.js. Специально подготовленный поток данных может записать информацию за пределами отведённой области памяти. Возможные последствия — повреждение памяти, раскрытие её содержимого, сбой и при подходящих условиях выполнение кода.

Node.js оценивает уязвимость как «high». Google как уполномоченная организация по присвоению CVE (CNA) для Brotli указывает оценку 9,2 по CVSS 4.0 и уровень «Critical». Это разные оценки, и они не обязательно противоречат друг другу. Значение не взято из самостоятельно проверенной здесь оценки NVD. Оно не характеризует ни вероятность взлома, ни наблюдаемые атаки.

Исправления Node.js вышли 21 октября 2026 года. 22 октября Imperva сообщила о выполнении кода в лабораторных условиях на неизменённом официальном Image Node.js 24.22.0 под Linux arm64. Тестировались `fetch()` и определённые конфигурации Express/body-parser со сжатыми запросами. Версия 24.22.1 отклоняла те же входные данные. Применимы ли результаты к другим средам, пока неясно.

## Насколько это опасно на практике?

Proof of Concept (PoC) от Imperva — это опубликованное доказательство осуществимости атаки в лабораторных условиях. Оно не доказывает ни атаку на работающий сайт, ни успешный взлом. На момент завершения исследования 23 октября в проверенных первичных источниках не было подтверждений активной эксплуатации. В проверенном каталоге CISA KEV по состоянию на 21 октября эта CVE также отсутствовала. Однако это не исключает неизвестных атак.

Простой сервер на `http.createServer()` не распаковывает входящие Brotli-Bodies автоматически. При использовании Express/body-parser должны одновременно совпасть маршрут, тип данных и включённая декомпрессия. Само наличие Express не доказывает уязвимость. Другие точки входа — Brotli-ответы на внешние запросы через `fetch()` в Node, а также прямая декомпрессия через `node:zlib`.

Поэтому проверьте также импорт по URL, функции предварительного просмотра и загрузку изображений. Важно, могут ли контролируемые злоумышленником данные попасть в уязвимый декодер. Сжатие собственных ответов — другой процесс.

## В каких версиях устранена уязвимость?

Следующие минимальные версии относятся к стандартным сборкам Node.js и только к этой CVE, а не служат общей гарантией безопасности.

Дистрибутивы могут переносить исправления в пакеты с более старым номером версии. Запросите подтверждение полной ревизии пакета, дистрибутива и Hersteller-Advisory. Следует также проверить, использует ли Node.js встроенную или системную библиотеку Brotli. В Debian решающей является системная Brotli; на момент исследования в Tracker ещё не было пакета с исправлением. Ubuntu помечала Node.js и Brotli как «Needs evaluation». Для обоих дистрибутивов исследование не подтверждает номер пакета с исправлением.

- Node.js 22.x: не ниже 22.23.4.
- Node.js 24.x: не ниже 24.22.1.
- Node.js 26.x: не ниже 26.12.1.
- Node.js 20: поддержка завершилась (EOL) 30 апреля 2026 года; исследование не подтвердило официальный Upstream-релиз с исправлением. Перейдите на поддерживаемую ветку с установленным исправлением.
- Node.js 18 и более старые версии, а также 21, 23 и 25: поддержка также прекращена. Выполните миграцию или запросите подтверждение конкретного исправления от провайдера. Не все отдельные исторические версии были полностью проверены на эту уязвимость.

## Как выяснить, затронут ли мой сайт?

Если Вы пользуетесь Shared или Managed Hosting без Shell-доступа, попросите Hoster проверить, использует ли Ваш проект Node.js и где именно. Фраза «сервер обновлён» не подтверждает состояние исправлений Вашего приложения. В данном случае Node.js — это среда выполнения, в которой работает приложение.

Самому WordPress нужен PHP. Но отдельной проверки требуют дополнительные Node-Backends, отдельные Frontends и инструменты сборки. Если приложение только выдаёт статические файлы HTML, CSS и JavaScript, при их загрузке серверный путь Node.js этого приложения не используется. Однако их создание — Build — всё равно может задействовать Node.js и внешние запросы.

Для Next.js важны режим работы и среда выполнения: проверьте серверную генерацию страниц, API-Routen, Route Handlers и оптимизацию изображений. При статическом экспорте всё равно необходимо проверить Build-окружение. Для Edge-функций провайдер должен назвать фактическую реализацию; общие границы версий Node.js к ним применять нельзя.

- Разработчики должны выполнить `node --version` в контексте приложения. Кроме того, `process.version` и `process.execPath` из работающего процесса приложения или его Startprotokoll должны подтвердить версию и путь к программе. Проверки в произвольной SSH-Shell недостаточно.
- Для контейнеров зафиксируйте Image, Tag и Digest; обновите базовый образ, соберите заново, полностью разверните и перепроверьте новый работающий контейнер. Обновление Host не меняет Image.
- В Plesk проверьте Runtime, выбранную для домена. Версия Panel и список доступных Runtimes не подтверждают состояние работающего приложения.
- Проверьте также автоматические Build-Jobs, CI-Runner и их контейнеры. Локальные установки разработчиков не подтверждают их состояние.

## Что написать Hoster или разработчику?

Вы можете отправить следующий запрос, указав Ваш домен или название проекта:

«Тема: CVE-2026-111497 для [домен/проект]. Здравствуйте! Проверьте, пожалуйста, использует ли наше приложение Node.js и обрабатывает ли оно внешние данные Brotli. Официальные релизы с исправлением: 22.23.4, 24.22.1 и 26.12.1. Какая версия и какой путь к программе фактически используются? Подтвердите это данными из процесса приложения или Startprotokoll. Для контейнеров: какой Image с Tag и Digest развёрнут? Для бэкпортов: какая ревизия пакета и какое Hersteller-Advisory подтверждают исправление и используется ли системная библиотека Brotli? Все ли Webprozesse, Worker и экземпляры были перезапущены или заменены и затем проверены? Проверьте также Express/body-parser, `fetch()`, оптимизацию изображений, `node:zlib`, дополнительные Backends и Build-Runner. Если обновление ещё не установлено: какая временная мера действует, какие пути остаются открытыми и когда будет установлено обновление? Пожалуйста, подтвердите развёрнутое состояние доказательствами. Спасибо!»

Новый собранный Image необходимо также развернуть. После обновления перезапустите или замените все затронутые процессы, а затем повторно проверьте активное состояние.

## Что поможет до установки обновления?

Временные меры не заменяют исправление. Разработчики могут установить `inflate: false` во всех затронутых Parser Express-/body-parser и тем самым отклонять сжатые запросы. Это касается не только Brotli и может помешать работе легитимных клиентов. Другие Parser, внешние запросы и прямые вызовы декодера необходимо проверять отдельно.

Вышестоящий Proxy или Web Application Firewall (WAF) может отклонять запросы, закодированные Brotli. Для этого необходимо охватить все соответствующие пути доступа; прямой доступ к исходному серверу не должен обходить фильтр. Внешние ответы для `fetch()` такая мера не защищает.

Затронутые функции импорта, предварительного просмотра или загрузки можно ограничить либо приостановить до установки исправления. Другой Header `Accept-Encoding` не является надёжным барьером против злонамеренного сервера ответов. Отключение выдачи Brotli на CDN также не подтверждает защиту декодера.

В Bulletin от 21 октября Vercel описывает правила WAF и продолжающееся развёртывание исправлений Runtime; завершение здесь не подтверждено. Для 22.x/24.x Vercel управляет версиями исправлений. Проекты на 20.x следует перевести на 22 или 24 и заново развернуть. Внешние Backends необходимо проверять отдельно.

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

### Достаточно ли обновить плагины WordPress?

Нет, если затронуты дополнительные сервисы Node.js. Самому WordPress нужен PHP; обновления плагинов не заменяют исправление Node.js. Они также не подтверждают состояние другого ПО с затронутой библиотекой Brotli.

### Защищает ли Cloudflare или WAF?

Исследование не подтвердило наличие специального правила Cloudflare для этой CVE. Защита WAF не заменяет ни обновление Runtime, ни проверку внешних ответов и прямого использования декодера.

### Что это означает для статического сайта?

Готовые файлы не используют серверный путь Node.js этого приложения. Build-окружение и дополнительные API-сервисы необходимо проверять отдельно.

### У меня нет доступа к консоли. Что делать?

Отправьте Hoster приведённый выше запрос. Потребуйте подтверждение для Вашего домена, включая фактическое состояние исправлений и перезапуск или Redeploy.

### Что это означает для Next.js на Vercel?

Попросите провайдера подтвердить текущее состояние. WAF Vercel охватывает трафик, проходящий через его сеть, но прямо не охватывает внешние ответы для `fetch()`. По данным Vercel, самостоятельно размещённый Next.js не блокирует Brotli-ответы при оптимизации изображений.

### Доказывает ли PoC, что меня взломали?

Нет. Лабораторный отчёт не подтверждает инцидент на Вашем сайте. С другой стороны, отсутствие подтверждённых случаев в изученных источниках не доказывает, что атаки исключены.

---
Veröffentlicht von bezahlbare-webseite.de — Website im Abo ab 79 €/Monat. https://bezahlbare-webseite.de/