Уязвимость CVE-2026-94545 позволяет специально подготовленному SVG-коду привести к выполнению команд на сервере с Next.js. Проблема находится в ImageResponse, функции генерации изображений Open Graph и других превью для социальных сетей. Опасный сценарий возникает, когда приложение берет контролируемое посетителем значение, например параметр из URL запроса, и вставляет его в создаваемое изображение. Vercel присвоила уязвимости критический уровень и оценку 9,5 по шкале CVSS.

Под угрозой находятся Next.js версий с 16.2.0 по 16.3.5 при использовании ImageResponse в среде Node.js, которая выбрана во фреймворке по умолчанию. Edge-версия ImageResponse этой ошибке не подвержена. Next.js 15 также не считается уязвимым. Проблемные выпуски доступны с 18 марта, когда вышел Next.js 16.2. Год для дат 18 марта, 22 и 23 сентября в опубликованных материалах прямо не указан, хотя номер CVE относится к 2026 году.
Внутри ImageResponse работает Satori, разработанная Vercel библиотека преобразования макета изображения в SVG. Затем полученный SVG используется для формирования итогового PNG-файла. Ошибка находится именно в Satori: некоторые значения попадали в SVG без надлежащего экранирования. Из-за этого строка, которая должна была остаться обычным текстом, могла быть разобрана как SVG-код. В Next.js такой ввод способен добраться до уязвимостей в других зависимых библиотеках и запустить цепочку, заканчивающуюся выполнением кода. Какие именно библиотеки участвуют в цепочке, Vercel не назвала. Satori оценила собственную проблему как умеренную, с CVSS 5,3, поскольку последствия зависят от способа дальнейшего использования созданного SVG.
Для атаки должны совпасть два условия: ImageResponse работает через Node.js, а данные пользователя попадают в содержимое, атрибуты либо стили SVG. В примере Vercel значение читается из URL запроса и помещается в элемент title. Граница уязвимого сценария описана не до конца. В бюллетене не уточняется, будет ли столь же опасен обычный пользовательский текст, вставленный, скажем, в заголовок или внутрь div. Поэтому проверять стоит любые внешние значения, участвующие в построении картинки, а не один конкретный элемент.
Искать потенциально опасный код следует по импорту ImageResponse из next/og. Чаще всего он встречается в обработчиках маршрутов и специальных файлах opengraph-image. Обработчик маршрута строит изображение после прихода запроса, поэтому вредоносное значение может обрабатываться непосредственно на сервере. Файл opengraph-image способен запускать генерацию как при сборке приложения, так и во время запроса; точное поведение зависит от реализации страницы и способа получения данных.
Vercel исправила ошибку 22 сентября. Безопасным выпуском ветки Next.js 16 указана версия 16.3.6. По состоянию на 23 сентября реестр npm не содержал исправленного релиза для линии 16.2, поэтому оставаться на ней с патчем нельзя: приложениям на Next.js 16.2 требуется переход на 16.3.6. В сообщении упоминается установка исправления через npm install, но продолжение команды с именем пакета и номером версии в доступном тексте отсутствует. Разработчикам, подключающим Satori напрямую, нужна версия 0.33.5. Отдельно выпущен Next.js 15.5.26 с дополнительным усилением защиты next/og в ветке 15.5, хотя сам Next.js 15 описанной уязвимостью не затронут.
Если быстро обновиться невозможно, внешние данные нельзя помещать в содержимое, атрибуты и стили SVG, создаваемого Node.js-версией ImageResponse. Простая фильтрация отдельных символов выглядит ненадежно: первопричиной стала недостаточная обработка значений на этапе генерации SVG. Edge-версия ImageResponse не уязвима, но Vercel не предлагает переход на нее как временное решение. Документация Next.js вдобавок помечает Edge runtime как устаревшую среду, так что строить долгосрочную защиту на таком переносе рискованно.
Автоматические средства проверки на момент раскрытия отставали от публикации исправления. The Hacker News 23 сентября проверило Next.js 16.3.5: npm audit не сообщил, что эта версия уязвима. Запись также отсутствовала в GitHub Advisory Database, а публичная карточка CVE-2026-94545 еще не была опубликована. Надежнее сверять фактически установленную версию Next.js вручную. Искать отдельную строку Satori в lock-файле бессмысленно: библиотека упакована внутри пакета Next.js и не отображается там как самостоятельная зависимость фреймворка.
По данным The Hacker News на 23 сентября, публичных сообщений об атаках через CVE-2026-94545 и открытого кода эксплойта не было. Это говорит лишь об отсутствии найденных публикаций, а не об отсутствии эксплуатации. Vercel не описала способ установить, обращался ли злоумышленник к уязвимому маршруту до обновления. Период возможного воздействия тянется с выпуска Next.js 16.2 от 18 марта, поэтому владельцам приложений остается анализировать журналы запросов, необычные URL, ошибки генерации изображений и подозрительные процессы на сервере без готового индикатора компрометации от поставщика.
Статус проектов, размещенных на платформе Vercel, тоже не прояснен. Ни бюллетень, ни объявление компании не сообщают, получают ли такие приложения автоматическую защиту от CVE-2026-94545. Это отличается от реакции Vercel на две критические уязвимости Next.js, исправленные в августе: тогда компания прямо заявила, что размещенные у нее приложения защищены и обновлять их не требуется. Для нынешней ошибки такого заверения нет, поэтому сам факт хостинга на Vercel нельзя считать заменой обновлению до Next.js 16.3.6.

Изображение носит иллюстративный характер
Под угрозой находятся Next.js версий с 16.2.0 по 16.3.5 при использовании ImageResponse в среде Node.js, которая выбрана во фреймворке по умолчанию. Edge-версия ImageResponse этой ошибке не подвержена. Next.js 15 также не считается уязвимым. Проблемные выпуски доступны с 18 марта, когда вышел Next.js 16.2. Год для дат 18 марта, 22 и 23 сентября в опубликованных материалах прямо не указан, хотя номер CVE относится к 2026 году.
Внутри ImageResponse работает Satori, разработанная Vercel библиотека преобразования макета изображения в SVG. Затем полученный SVG используется для формирования итогового PNG-файла. Ошибка находится именно в Satori: некоторые значения попадали в SVG без надлежащего экранирования. Из-за этого строка, которая должна была остаться обычным текстом, могла быть разобрана как SVG-код. В Next.js такой ввод способен добраться до уязвимостей в других зависимых библиотеках и запустить цепочку, заканчивающуюся выполнением кода. Какие именно библиотеки участвуют в цепочке, Vercel не назвала. Satori оценила собственную проблему как умеренную, с CVSS 5,3, поскольку последствия зависят от способа дальнейшего использования созданного SVG.
Для атаки должны совпасть два условия: ImageResponse работает через Node.js, а данные пользователя попадают в содержимое, атрибуты либо стили SVG. В примере Vercel значение читается из URL запроса и помещается в элемент title. Граница уязвимого сценария описана не до конца. В бюллетене не уточняется, будет ли столь же опасен обычный пользовательский текст, вставленный, скажем, в заголовок или внутрь div. Поэтому проверять стоит любые внешние значения, участвующие в построении картинки, а не один конкретный элемент.
Искать потенциально опасный код следует по импорту ImageResponse из next/og. Чаще всего он встречается в обработчиках маршрутов и специальных файлах opengraph-image. Обработчик маршрута строит изображение после прихода запроса, поэтому вредоносное значение может обрабатываться непосредственно на сервере. Файл opengraph-image способен запускать генерацию как при сборке приложения, так и во время запроса; точное поведение зависит от реализации страницы и способа получения данных.
Vercel исправила ошибку 22 сентября. Безопасным выпуском ветки Next.js 16 указана версия 16.3.6. По состоянию на 23 сентября реестр npm не содержал исправленного релиза для линии 16.2, поэтому оставаться на ней с патчем нельзя: приложениям на Next.js 16.2 требуется переход на 16.3.6. В сообщении упоминается установка исправления через npm install, но продолжение команды с именем пакета и номером версии в доступном тексте отсутствует. Разработчикам, подключающим Satori напрямую, нужна версия 0.33.5. Отдельно выпущен Next.js 15.5.26 с дополнительным усилением защиты next/og в ветке 15.5, хотя сам Next.js 15 описанной уязвимостью не затронут.
Если быстро обновиться невозможно, внешние данные нельзя помещать в содержимое, атрибуты и стили SVG, создаваемого Node.js-версией ImageResponse. Простая фильтрация отдельных символов выглядит ненадежно: первопричиной стала недостаточная обработка значений на этапе генерации SVG. Edge-версия ImageResponse не уязвима, но Vercel не предлагает переход на нее как временное решение. Документация Next.js вдобавок помечает Edge runtime как устаревшую среду, так что строить долгосрочную защиту на таком переносе рискованно.
Автоматические средства проверки на момент раскрытия отставали от публикации исправления. The Hacker News 23 сентября проверило Next.js 16.3.5: npm audit не сообщил, что эта версия уязвима. Запись также отсутствовала в GitHub Advisory Database, а публичная карточка CVE-2026-94545 еще не была опубликована. Надежнее сверять фактически установленную версию Next.js вручную. Искать отдельную строку Satori в lock-файле бессмысленно: библиотека упакована внутри пакета Next.js и не отображается там как самостоятельная зависимость фреймворка.
По данным The Hacker News на 23 сентября, публичных сообщений об атаках через CVE-2026-94545 и открытого кода эксплойта не было. Это говорит лишь об отсутствии найденных публикаций, а не об отсутствии эксплуатации. Vercel не описала способ установить, обращался ли злоумышленник к уязвимому маршруту до обновления. Период возможного воздействия тянется с выпуска Next.js 16.2 от 18 марта, поэтому владельцам приложений остается анализировать журналы запросов, необычные URL, ошибки генерации изображений и подозрительные процессы на сервере без готового индикатора компрометации от поставщика.
Статус проектов, размещенных на платформе Vercel, тоже не прояснен. Ни бюллетень, ни объявление компании не сообщают, получают ли такие приложения автоматическую защиту от CVE-2026-94545. Это отличается от реакции Vercel на две критические уязвимости Next.js, исправленные в августе: тогда компания прямо заявила, что размещенные у нее приложения защищены и обновлять их не требуется. Для нынешней ошибки такого заверения нет, поэтому сам факт хостинга на Vercel нельзя считать заменой обновлению до Next.js 16.3.6.