Множественные уязвимости в Next.js: от подмены запросов до раскрытия серверных функций

Next.js

Разработчики Next.js выпустили внеплановые обновления, закрывающие девять уязвимостей. Среди них - ошибки, позволяющие злоумышленникам выполнять серверную подделку запросов (SSRF), вызывать отказ в обслуживании, обходить аутентификацию и получать доступ к внутренним конечная точкам сервера. Патчи затронули версии 15.5.21 и 16.2.11, а также затронули все ветки, начиная с 12.0.0, 13.0.0 и 14.1.1 в зависимости от конкретной уязвимости. Исследователь KarimPwnz сообщил о проблемах в рамках программы bug bounty.

Серверная подделка запросов через динамические хосты

Наиболее опасная из уязвимостей высокой степени опасности (CVE-2026-64645, CVSS 7.5) связана с правилами "rewrites()" и "redirects()". Если в конфигурации Next.js используется динамический сегмент в имени хоста для внешнего целевого адреса - например, "https://:tenant.api.example.com" - атакующий может подставить произвольный хост. Сервер проксирует запрос на этот хост, а ответ возвращается из приложения, что приводит к серверной подделке запросов (SSRF). Это позволяет использовать сервер для доступа к внутренним ресурсам, которые обычно недоступны извне.

Вторая ошибка того же класса (CVE-2026-64649, CVSS 6.8) затрагивает Server Actions на кастомных серверах. Если Host-заголовок не фиксирован, злоумышленник может перенаправить запрос на вредоносный хост. В некоторых конфигурациях также возможно извлечение внутренних значений, ослабляющих авторизацию промежуточного ПО (middleware). Уязвимость проявляется только в окружениях, где Host не закреплён - например, при использовании собственного сервера или развертывании без прокси, фиксирующего заголовок. Начиная с версии 14.2.0 встроенные средства запуска ("next start" и standalone-сборка) уже закрепляют Host.

Обход аутентификации и раскрытие данных

Уязвимость CVE-2026-64642 (CVSS 6.8) позволяет обойти проверки, реализованные в промежуточном ПО. Она затрагивает приложения, использующие App Router и сборку с Turbopack, если в конфигурации "config.i18n.locales" указан только один язык. Специально сформированные запросы могут миновать аутентификацию, что даёт доступ к защищённым страницам.

Ещё одна проблема средней степени опасности (CVE-2026-64643, CVSS 4.0) - раскрытие идентификаторов серверных функций. В приложениях App Router с Server Actions идентификаторы конечных точек ("use server") могут быть извлечены из статических клиентских артефактов (например, из JavaScript-чанков). Само по себе это даёт лишь информацию для разведки, но в сочетании с другими уязвимостями может привести к более серьёзным последствиям.

Отказ в обслуживании и чрезмерное потребление ресурсов

Три уязвимости приводят к отказу в обслуживании. CVE-2026-64641 (CVSS 5.3) - отправка специальных запросов к Server Actions в App Router вызывает чрезмерную загрузку процессора, блокируя обработку других запросов в том же процессе. CVE-2026-64646 (CVSS 3.9) - неограниченный размер полезной нагрузки в Server Actions на среде выполнения Edge (Edge runtime) ведёт к чрезмерному расходу памяти. CVE-2026-64644 (CVSS 3.9) - в Image Optimization API при самосборке вредоносные SVG-изображения с удалённых хостов могут исчерпать процессорное время.

Путаница кеша и утечка данных

Две уязвимости средней степени опасности связаны с некорректным кешированием ответов на POST-запросы. CVE-2026-64648 (CVSS 5.1) - если при вызове "fetch" переданы разные объекты инициализации ("init"), сервер может вернуть кешированный ответ от другого запроса с тем же URL, но другим телом. Это приводит к раскрытию конфиденциальных данных из ответа. CVE-2026-64647 (CVSS 3.2) - та же проблема проявляется при использовании кодировок тела запроса, отличных от UTF-8 (например, UTF-16). Из-за особенностей хеширования разные последовательности символов могут попасть в одну кеш-ячейку.

Что делать

Пользователям Next.js рекомендуется немедленно обновиться до версий 15.5.21 или 16.2.11. Для тех, кто не может выполнить обновление, предложены временные решения:

  • для SSRF в rewrites/redirects - не формировать внешние хосты из пользовательского ввода; если динамический поддомен необходим, ограничить допустимые символы регулярным выражением, например "[a-z0-9-]+";
  • для SSRF в Server Actions - зафиксировать Host-заголовок на границе сети или задать переменную окружения "__NEXT_PRIVATE_ORIGIN" (доступно с версии 14.2.0);
  • для обхода middleware - перенести авторизацию на уровень серверных данных страниц вместо полагания исключительно на промежуточное ПО;
  • для проблем с кешем - по возможности использовать только UTF-8 в телах запросов;
  • для раскрытия endpoint’ов - не рассчитывать на аутентификацию в самом "use server", а проверять права внутри серверной функции.

Вывод

Столь масштабный выпуск исправлений - напоминание о необходимости тщательного контроля над входящими данными и правильной конфигурации маршрутизации. Особое внимание стоит уделить приложениям с динамическими внешними хостами и Server Actions: они становятся точками входа для SSRF и раскрытия внутренней логики. Своевременное обновление инструментов разработки остаётся критически важной мерой защиты.

Ссылки

Комментарии: 0