Критическая уязвимость в Next.js: код на сервере через подставленный SVG

· Безопасность
Функция ImageResponse, генерирующая картинки для соцсетей, при определённых условиях позволяет выполнить произвольный код на сервере. Vercel выпустила исправление 22 сентября.

cover.svg

Компания Vercel предупредила о критической уязвимости в популярном фреймворке Next.js. Проблема связана с функцией ImageResponse, которая создаёт изображения для Open Graph и других превью для социальных сетей. Если приложение подставляет в такое изображение данные, контролируемые злоумышленником (например, текст, прочитанный из URL запроса), атакующий может добиться выполнения произвольного кода на сервере.

Кого затрагивает

Уязвимость получила идентификатор CVE-2026-94545 и оценку CVSS 9.5 (критический уровень). Ей подвержены версии Next.js с 16.2.0 по 16.3.5 при работе ImageResponse в среде Node.js, которая используется по умолчанию. Edge-версия функции и ветка Next.js 15 не затронуты.

Под капотом ImageResponse использует библиотеку Vercel под названием Satori, которая сначала переводит макет изображения в SVG-код, а затем формирует итоговый PNG. По данным advisory, уязвимы приложения, передающие подконтрольные атакующему значения в содержимое, атрибуты или стили SVG. В примере из advisory значение из URL помещается в элемент title; при этом не уточняется, относится ли это и к тексту в обычных элементах, например заголовку внутри div.

Чтобы найти использование функции, стоит искать импорт ImageResponse из next/og — в обработчиках маршрутов и в файлах opengraph-image.

Исправление и обходной путь

Vercel устранила проблему 22 сентября в версии 16.3.6 — на момент 23 сентября это единственный исправленный релиз. Для ветки 16.2 отдельного исправления в реестре npm нет, поэтому таким приложениям нужно переходить на 16.3.6. В версию 15.5.26 добавлено дополнительное усиление защиты для next/og.

Если обновление откладывается, рекомендуется просто не пропускать данные, контролируемые извне, в содержимое, атрибуты и стили SVG. Переходить на Edge-версию advisory не предлагает — документация Next.js помечает Edge-среду как устаревшую.

Тонкости обнаружения

По проверкам The Hacker News от 23 сентября, npm audit не отмечал уязвимую версию 16.3.5, advisory ещё не значилось в базе GitHub Advisory Database, а запись CVE не была опубликована. Проверять версию Next.js стоит напрямую: Satori встроена в пакет Next.js, поэтому в lock-файле она не указана как зависимость.

Непосредственно ошибка находится в Satori: по её собственному advisory, некоторые значения попадали в SVG-вывод без должного экранирования и могли быть прочитаны как код, а не как обычный текст. Сама Satori оценивает ту же уязвимость лишь как умеренную (5.3), поскольку последствия зависят от того, как используется SVG. Тем, кто применяет Satori напрямую, следует обновиться до версии 0.33.5.

Публичных сообщений об атаках и готовых эксплойтов на 23 сентября не обнаружено. Vercel не уточняет, защищены ли приложения, размещённые на её платформе, и не даёт способа проверить, не эксплуатировался ли уязвимый маршрут до выхода патча.


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.