Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Безопасность

Ноябрьский патч Next.js: кэш use cache мог отдавать данные одного клиента другому

6 ноября 2026·5 мин чтения
Next.js 16.4.5Cache Components
Ноябрьский патч Next.js: кэш use cache мог отдавать данные одного клиента другому

3 ноября 2026 года Vercel выпустила Next.js 16.4.5 и 15.5.29 — плановый security-релиз, закрывающий семь уязвимостей. Самые неприятные связаны с директивой use cache: при определённых сценариях кэш отдавал пользователю или арендатору чужие данные. Если проект на Next.js 16.3+ с Cache Components, обновитесь и сбросьте кэш.

Ни одна из семи уязвимостей не даёт выполнить произвольный код, но для SaaS и многоарендных сервисов это не утешение: утечка ответа одного клиента другому — прямой инцидент с персональными данными. В числе затронутых — сайты и личные кабинеты, которые команды собирают в рамках разработки сайтов на React и Next.js, особенно если в одном приложении живут несколько тенантов, регионов или языковых версий.

Ветка 15.5 получила исправления трёх проблем, 16.4 — всех семи. Хостинг-платформы Netlify и Pantheon продублировали предупреждение и подчеркнули: сами они Next.js в проектах клиентов не обновляют, это делает команда приложения. Ниже — что именно сломано, кого касается и что сделать сегодня. Как устроены уровни кэша в веб-приложениях, мы разбирали в материале о кэшировании в веб-разработке.

Что закрыли в Next.js 16.4.5 и 15.5.29

По данным бюллетеня Next.js, четыре из семи проблем касаются кэша Cache Components, ещё три — Edge-маршрутов, проксирования ответов и оптимизации изображений. Vercel оценивает первую как высокую по критичности, остальные — как средние; Netlify в своём уведомлении относит все семь к среднему уровню.

  • Утечка между арендаторами через unstable_cache и use cache (GHSA-mfr8-8qww-v76h). Если одна и та же публичная функция с use cache читает root-параметр — например, идентификатор тенанта — и вызывается и напрямую, и изнутри unstable_cache, при холодном заполнении кэша параллельный запрос может получить чужой результат. Дальше он сохраняется и раздаётся до ревалидации.
  • Вложенные функции use cache (GHSA-vc7v-qv4w-wrv8). Внешняя запись кэша сохраняется раньше, чем учтены зависимости внутренней функции от root-параметра, — контент одного тенанта, сайта или локали уходит запросам другого.
  • Бинарные аргументы use cache (GHSA-rhh4-g77r-r9qj). Разные бинарные значения могли давать одинаковый ключ кэша: пользователь получал чужой результат или подсовывал свой другим.
  • Отравление общего шелла страницы в self-hosted (next start) при включённых Cache Components и выключенном Partial Prefetching. Специально собранный URL приводит к неверному серверному рендеру или к «застрявшим» 404 на валидных страницах.
  • Подмена ответов за HTTP/1.1-прокси (GHSA-pc58-hwjq-p385): если приложение возвращает чужой Response без изменений, распакованное тело уходит со старыми заголовками сжатия, и за прокси с конвейерной обработкой ответы могут достаться не тем клиентам.
  • Утечка HttpOnly-cookie в Edge-маршрутах (GHSA-f3mh-rxg3-f5g2): NextResponse.cookies.set() дублировал значение во внутренний заголовок x-middleware-set-cookie, который читается JavaScript той же страницы.
  • Обход запрета SVG в Image Optimization (GHSA-7qx7-33qx-rqx2): картинка из разрешённого источника маскировалась под AVIF и доходила до SVG-парсера, несмотря на dangerouslyAllowSVG: false.

Кого это касается в первую очередь

Три «кэшевые» уязвимости требуют Cache Components — механизма, который активно развивается с Next.js 16, а уязвимая комбинация с unstable_cache касается версий 16.3 и новее. Если вы ещё на Pages Router или не включали Cache Components, основной риск ниже, но Edge-cookie, прокси и SVG-обход актуальны и для 15.x.

Сильнее всего задеты многоарендные SaaS, маркетплейсы с личными кабинетами и мультиязычные сайты, где root-параметр ([tenant], [locale], [region]) разделяет данные. Именно там «чужой» кэш превращается из бага вёрстки в утечку. Self-hosted-проекты за nginx или другим HTTP/1.1-прокси стоит проверить отдельно — у них два дополнительных сценария (отравление шелла и подмена ответов).

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

  1. Обновить зависимость: npm install next@16.4.5 для ветки 16.x или npm install next@15.5.29 для 15.x, пересобрать и выкатить.
  2. На Netlify дополнительно обновить адаптер @netlify/plugin-nextjs до 5.16.6: по словам платформы, одно обновление Next.js не закрывает сценарий с Middleware.
  3. Сбросить кэш после деплоя. Записи, «отравленные» до патча, продолжат раздаваться до ревалидации или вытеснения — новая версия их не вычистит сама.
  4. Проверить код: найти функции с use cache, которые читают root-параметры или принимают бинарные аргументы, и места, где одна функция вызывается и напрямую, и через unstable_cache.
  5. Если HttpOnly-cookie с сессией выставляются в Edge-маршрутах — оценить, мог ли на странице работать сторонний скрипт, и при сомнениях перевыпустить сессии.

Если проект давно не обновлялся и прыжок до 16.4.5 тянет за собой мажорные изменения, это задача для планового сопровождения, а не для пятничного хотфикса. Выбор между Next.js и альтернативами мы сравнивали в статье Next.js или Nuxt.

Почему это не последний такой релиз

С июля 2026 года Next.js выпускает исправления безопасности по расписанию: анонс за неделю, затем релиз в двух LTS-ветках. С конца августа в блоге фреймворка вышли плановые бюллетени за август, сентябрь и ноябрь и ещё два внеплановых обновления — 22 сентября и 14 октября. Для команд это значит, что обновление Next.js стоит встроить в регулярный цикл — с мониторингом анонсов и тестовым стендом, — а не ждать громкой CVE.

Часто задаваемые вопросы

Можно ли через эти уязвимости взломать сервер? Нет. Ни одна из семи не даёт удалённого выполнения кода. Главный риск — раскрытие данных между пользователями и отравление кэша.

Мой проект на Vercel — нужно что-то делать? Да, обновить next в зависимостях и передеплоить: исправления живут в коде фреймворка. Netlify и Pantheon прямо пишут, что за обновление отвечает команда приложения.

Достаточно ли обновиться? Не всегда. Уже сохранённые в кэше чужие ответы нужно сбросить, а на Netlify — обновить ещё и адаптер.

Какие версии исправлены? 16.4.5 (Active LTS) закрывает все семь проблем, 15.5.29 (Maintenance LTS) — три, актуальные для этой ветки.

Источники

Материал подготовлен редакцией YuSMP Group по открытым источникам. Нужна экспертиза по теме или разработка под задачу — обсудим проект.

Обновим Next.js без простоя и потерь кэша

Проверим проект на уязвимые сценарии use cache, обновим до 16.4.5 или 15.5.29, прогоним регресс и настроим регулярные обновления фреймворка в рамках сопровождения.

Заказать поддержку сайта