Разработчики Next.js 14 октября выпустили внеплановые обновления 16.4.1 и 15.5.28, закрывающие две уязвимости удалённого выполнения кода без аутентификации и одну уязвимость отказа в обслуживании. Две RCE Vercel оценила в 9,5 балла по CVSS; третья проблема позволяет загрузить CPU отдельного серверного процесса специально сформированными запросами.
Исправления доступны для актуальных LTS-выпусков веток Active и Maintenance. Одна из RCE связана с React Server Components и использованием use cache, вторая — с обработкой SVG через librsvg, которую Next.js использует через пакет sharp. DoS затрагивает Server Actions.
Какие версии затронуты
Уязвимость выполнения кода через use cache отслеживается как GHSA-673q-mjm6-r5xr. Ей подвержены Next.js с 16.0.0 по 16.4.0; исправление вошло в 16.4.1. Риск касается приложений на App Router с включёнными Cache Components, в которых функция use cache возвращает более одного типизированного массива.
Вторая RCE имеет идентификаторы CVE-2026-96889 и GHSA-2464-fhr4-w9xw. Она затрагивает Next.js от 10.0.0 до 15.5.27, а также версии с 16.0.0 по 16.4.0. Для устранения требуется Next.js 16.4.1 либо Next.js 15.5.28 вместе с sharp версии 0.35.5 или новее. Под угрозой находятся приложения, которые передают SVG, предоставленные атакующим, в sharp на Linux-системах с glibc.
Отказ в обслуживании через Server Actions описан в GHSA-p3m5-59mp-jv5r. Уязвимы версии Next.js от 13.0.0 до 15.5.27 и от 16.0.0 до 16.4.0; обновления 15.5.28 и 16.4.1 содержат исправление. Сценарий применим к приложениям на App Router, где определено хотя бы одно серверное действие.
RCE в React Server Components ограничена редкой конфигурацией
Проблема в React Server Components затрагивает пакеты react-server-dom-webpack, react-server-dom-parcel и react-server-dom-turbopack версий от 19.0.0 до 19.3.0. В рекомендациях React отмечается, что эксплуатация возможна в крайне редком случае: ответ должен передавать несколько типизированных массивов вместе со значением, контролируемым атакующим.
Для Next.js условия ещё уже. Триггером служит use cache, возвращающий более одного типизированного массива. Таким образом, проблема касается только приложений на ветке Next.js 16, где включены Cache Components — базовый механизм для use cache. Vercel при этом рекомендует обновиться и организациям, которые не используют эту функцию.
Уязвимый код находится в тех же трёх пакетах, что и React2Shell — уязвимость максимальной критичности, раскрытая в декабре 2025 года и массово эксплуатировавшаяся злоумышленниками. Однако текущий сценарий заметно уже: React характеризует его как редкое сочетание нескольких типизированных массивов и данных, контролируемых атакующим.
SVG и librsvg: риск зависит от конфигурации
CVE-2026-96889 представляет собой ошибку работы с памятью в librsvg. Next.js обращается к этой библиотеке через sharp, который используется для обработки изображений. Возможность выполнения кода возникает, когда Next.js работает в Linux-среде с glibc.
По умолчанию Next.js не оптимизирует SVG. Для передачи таких файлов в оптимизатор изображений требуется включить dangerouslyAllowSVG. Та же библиотека участвует в рендеринге изображений для next/og — функции создания превью для социальных сетей, — если она запускается в среде Node.js.
Степень риска зависит и от платформы. Netlify сообщила, что в её конфигурации не выполняется ветвь кода, отвечающая за оптимизацию изображений, поэтому влияние уязвимостей для неё ограничено. Платформа всё равно рекомендует обновление.
Это третий случай с августа, когда обработка изображений в Next.js связывается с возможностью выполнения кода. В августе похожий риск был вызван ошибкой в libheif, доступной через sharp: специально сформированное AVIF-изображение могло привести к выполнению кода при обработке оптимизатором. В сентябре уязвимость в next/og позволяла контролируемому атакующим тексту изменять генерируемый SVG.
В этот раз код обработки изображений самого Next.js не менялся: в 16.4.1 применяется тот же оптимизатор, что и в 16.4.0. Исправление обеспечивается обновлением поставляемого sharp до версии 0.35.5 с исправленной librsvg 2.63.2.
При выборе SIEM-платформы для централизованной корреляции журналов можно отдельно изучить Security Capsule SIEM и сопоставить её с требованиями своей инфраструктуры.
CVE-2026-96889 раскрыли 23 сентября, а исправление появилось в sharp 27 сентября. Red Hat оценила проблему в 7,8 балла и указала, что для эксплуатации необходимо взаимодействие пользователя, например открытие вредоносного файла. Vercel, со своей стороны, присвоила проблеме в Next.js 9,5 балла, рассматривая её как доступную по сети.
Исследователь Рафаэль Б. Диас, сообщивший об ошибке в librsvg, заявил, что она лежит в основе сентябрьской уязвимости next/og. Для более ранней проблемы уже публиковался рабочий эксплойт, рассчитанный на одну конкретную конфигурацию сервера.
Сопровождающий проекта sharp также предупреждает, что результат эксплуатации зависит от сборки Node.js на сервере. В отдельных случаях ошибка может привести не к выполнению кода, а только к сбою процесса. При этом официальные бинарные файлы Node.js не имеют защиты от атак такого типа на память.
DoS через Server Actions
В приложении с App Router и хотя бы одним Server Action специально сформированные запросы могут загрузить CPU одного серверного процесса до предела. В результате этот процесс перестанет обрабатывать другие запросы. Приложения на Pages Router, а также приложения без серверных действий этой проблеме не подвержены.
Для уязвимостей через use cache и Server Actions обходных мер нет: устранить их можно только обновлением Next.js.
Что проверить и обновить
Организациям, использующим Next.js, следует обновить ветку 16 до 16.4.1, а ветку 15 — до 15.5.28, после чего пересобрать и повторно развернуть приложение.
Веткам Next.js 10–14 исправленный релиз Next.js недоступен. Для приложений на этих версиях, затронутых SVG-RCE, необходимо как минимум обеспечить sharp 0.35.5 или новее либо запретить SVG-рендеринг через sharp; при возможности следует перейти на поддерживаемую ветку Next.js.
При обновлении Next.js менеджер пакетов должен подтянуть исправленный sharp. Для ветки 16 это обеспечивается зависимостями: Next.js 16.4.1 требует sharp 0.35.5. В ветке 15 ситуация иная: Next.js 15.5.28 всё ещё допускает уязвимый sharp серии 0.34.x. Поэтому обновление поверх существующей установки может сохранить старую версию пакета.
Проверить установленную версию можно командой:
npm ls sharp
Если установлена версия ниже 0.35.5, sharp необходимо обновить. Для временного снижения риска по проблеме с SVG можно установить sharp 0.35.5 или новее либо запретить SVG-рендеринг в sharp рабочим вызовом JavaScript API:
sharp["block"]({ operation: ["VipsForeignLoadSvg"] })
По состоянию на 15 октября рекомендации по проблемам в use cache и Server Actions ещё не получили CVE и не были опубликованы в канале рекомендаций npm, на котором основан npm audit. Поэтому сканеры зависимостей могут не сигнализировать об этих двух уязвимостях. Проблема с обработкой изображений при этом выявляется собственным предупреждением sharp.
Практический приоритет для администраторов — определить используемую ветку Next.js, проверить наличие App Router, Cache Components, Server Actions и обработки недоверенных SVG, затем обновить Next.js там, где доступно исправление, и отдельно убедиться, что sharp не остался на версии 0.34.x. Владельцам веток 10–14 следует отдельно применить обновление sharp либо запретить SVG-рендеринг и запланировать переход на поддерживаемую ветку.
