Next.js 15.5.28 и 16.4.1: две критические RCE, обновите проект

14 октября 2026 года команда Next.js выпустила внеплановое обновление безопасности: версии 15.5.28 и 16.4.1. Оно закрывает две критические уязвимости, которые позволяют удалённо выполнить код без авторизации, и одну высокую, ведущую к отказу в обслуживании. Две из трёх исправлений перенесли с сентябрьского выпуска из-за согласования с авторами сторонних библиотек. Касается всех, кто держит сайт или приложение на Next.js на своём сервере.
Что произошло
Vercel заранее, 8 октября, предупредила о выпуске: «две критические и одна высокая уязвимость в сторонних зависимостях». 14 октября вышли сами исправления, а 20 октября Агентство кибербезопасности Сингапура выпустило предупреждение с рекомендацией «обновиться немедленно» и оценкой 9,5 по CVSS 4.0 для обеих критических уязвимостей.
| Идентификатор | Что это | Когда опасно |
|---|---|---|
| CVE-2026-96889 | Удалённое выполнение кода через оптимизацию изображений | Next.js на Linux с glibc, обработка недоверенных SVG через sharp |
| GHSA-673q-mjm6-r5xr | Удалённое выполнение кода в кешировании | App Router с Cache Components, функция `use cache` возвращает несколько типизированных массивов |
| GHSA-p3m5-59mp-jv5r | Отказ в обслуживании | App Router с хотя бы одним Server Action, версии 13.x–16.x |
Уязвимы ветки 16.x до 16.4.1 и все версии с 10.x по 15.x до 15.5.28.
Кого касается
В первую очередь тех, кто запускает Next.js сам: VPS, Docker, Kubernetes. Именно там стоит обычный Linux с glibc и работает встроенная оптимизация картинок. На таких серверах уязвимость в обработке изображений превращается в выполнение кода с правами процесса Node.js. А у этого процесса обычно есть доступ к переменным окружения: ключам базы данных, платёжных сервисов, почты.
У облачных платформ ситуация разная. Netlify пишет, что `next/image` у них обслуживает собственный Image CDN, поэтому путь CVE-2026-96889 не задействован. Но приложения, которые рендерят недоверенные данные через `ImageResponse` из `next/og`, затронуты, хотя последствия там ограничены падением функции. Превью-сборки и ветки деплоя остаются уязвимыми, пока их не удалят.

Что делать
- Проверьте версию в `package.json` и в lock-файле: `npm ls next`.
- Обновите `next` до 15.5.28 или 16.4.1. Ветки ниже 15 исправлений не получили: 10.x–14.x нужно переводить на 15.5.28 или новее.
- Пересоберите и перевыкатите приложение. Обновлённый lock-файл без деплоя ничего не меняет.
- Удалите старые превью-деплои, если платформа их хранит.
- Если приложение принимает картинки от пользователей, проверьте, какие форматы вы пропускаете в оптимизатор. SVG от посетителей лучше не обрабатывать вовсе.
- После обновления посмотрите журналы за последние недели: необычные запросы к `/_next/image` и всплески ошибок Server Actions.
Почему уязвимости «в зависимостях» — ваша проблема
В анонсе Vercel подчёркивает, что все три уязвимости находятся в сторонних библиотеках. Для владельца сайта это ничего не меняет: библиотеки приезжают в проект вместе с Next.js, и закрыть их можно только обновлением фреймворка. Оптимизация изображений, например, опирается на sharp, а тот — на системные библиотеки обработки графики.
Есть и практический вывод. Когда проект годами не обновлялся, переход с 13.x или 14.x на 15.5.28 превращается в миграцию: меняются API, правила кеширования, поведение App Router. В спокойное время такая миграция занимает дни. Во время критической уязвимости приходится делать её в спешке.
Как проверить, что обновление встало
- В собранном приложении откройте `node_modules/next/package.json` или выполните `npm ls next` на сервере, а не только локально.
- Убедитесь, что Docker-образ пересобран: старый тег может продолжать работать после обновления репозитория.
- Если перед приложением стоит CDN с кешем, сбросьте кеш HTML после деплоя, чтобы не отдавать страницы старой сборки.
- Проверьте ключевые сценарии: вход, формы, оплату, загрузку изображений.
Наше мнение
Next.js выпускает исправления безопасности почти каждый месяц: в июле было девять CVE, в августе ещё две RCE, теперь октябрь. На практике это значит, что проект на Next.js нельзя «сдать и забыть». Мы советуем заказчикам закладывать в договор поддержки ежемесячное обновление зависимостей и отдельную строку на внеплановые выпуски. Тем, кто выбирает между своим сервером и облачной платформой, стоит учитывать: на своём сервере вся ответственность за такие обновления на вас или подрядчике. Облако снимает часть рисков, но не все: уязвимость в `use cache` живёт в коде приложения, и её закрывает только обновление пакета. Хорошая практика — автоматическая проверка зависимостей в репозитории (Dependabot, Renovate или аналог), которая сама откроет запрос на обновление в день выпуска.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
У меня Next.js 14. Есть ли исправление для этой ветки?
Нет. Уязвимы версии с 10.x по 15.x до 15.5.28, отдельного выпуска для 14.x нет. Нужно переходить на 15.5.28 или 16.4.1.
Сайт на Vercel. Нужно что-то делать?
Да, обновить пакет и перевыкатить проект. Уязвимость в use cache зависит от кода приложения, а не от платформы.
Атакуют ли эти уязвимости?
На момент выпуска источники не сообщали об атаках. Но обе критические уязвимости не требуют входа, а исправления публичны, поэтому откладывать обновление не стоит.
Что такое glibc и при чём он тут?
Это стандартная системная библиотека большинства дистрибутивов Linux. Уязвимость в обработке изображений проявляется именно на таких системах. Образы на Alpine используют другую библиотеку, но обновляться нужно всё равно из-за двух других уязвимостей.
Можно ли просто отключить оптимизацию картинок?
Это снижает риск по CVE-2026-96889, но не закрывает уязвимости в use cache и Server Actions. Правильное решение — обновление.
Как часто Next.js выпускает исправления безопасности?
В 2026 году — почти каждый месяц: в июле вышло девять CVE, в августе две RCE, в сентябре плановый выпуск, в октябре внеплановый. Закладывайте ежемесячное обновление зависимостей в план поддержки, а не ждите аварии.