Новости
SVG-стеганография и вредонос во флагах
Как в безобидные на вид SVG-картинки прячут вредоносный код и что с этим делать.
Компания Vercel закрыла критическую уязвимость в Next.js — фреймворке, на котором построены миллионы сайтов. Проблема сидела в функции ImageResponse из модуля next/og: она превращает разметку в SVG-картинку для превью-ссылок (Open Graph) и делает это, не экранируя чужие данные должным образом.
Коротко: CVE-2026-94545 (CVSS 9.5) затрагивает Next.js 16.2.0–16.3.5 в среде выполнения Node.js. Библиотека Satori, которая рендерит разметку в SVG для ImageResponse, не экранировала значения перед вставкой в SVG-вывод — если в картинку попадали чужие данные (например, из параметров запроса), атакующий мог внедрить свою SVG-разметку и выполнить код на сервере. Исправлено в Next.js 16.3.6, вышедшем 22 сентября 2026.

22 сентября 2026 компания Vercel, разработчик фреймворка Next.js, выпустила версию 16.3.6 с исправлением критической уязвимости CVE-2026-94545. По оценке CVSS v4.0 ей присвоен рейтинг 9.5 — критический. Брешь сидит в функции ImageResponse из встроенного модуля next/og, который разработчики используют для автоматической генерации превью-картинок ссылок (Open Graph, «og:image») прямо на сервере — без Photoshop и заготовленных файлов.
Уязвимы версии Next.js с 16.2.0 по 16.3.5 включительно — то есть с даты выхода 16.2 (18 марта 2026) до патча. Затронута только среда выполнения Node.js: вариант ImageResponse для Edge Runtime уязвимости не подвержен.
На момент выхода патча (23 сентября 2026) независимые исследователи не сообщали о рабочих эксплойтах «в дикой природе» или атаках на реальные сайты. Но детали уязвимости уже разобраны в нескольких публичных технических разборах, поэтому окно для обновления стоит закрывать быстро.
ImageResponse работает так: разработчик описывает картинку React-разметкой (JSX) — например, «текст заголовка поверх цветного фона». Next.js передаёт эту разметку библиотеке Satori (разработка той же Vercel), которая превращает JSX в SVG-документ, а затем растрирует его в PNG для готового превью.
Проблема — в том, как Satori собирает промежуточный SVG. Некоторые значения — например, текст заголовка или динамический параметр из URL — попадали в итоговую SVG-разметку без должного экранирования. Если такое значение приходило от пользователя (скажем, страница генерировала og:картинку по параметру ссылки вида /api/og?title=…), атакующий мог составить строку, которая «вырывается» из своего контекста — текстового узла, атрибута или стиля — и становится частью самой разметки SVG. Дальше эта разметка обрабатывается как код, что и даёт выполнение произвольных команд на сервере.
Формат SVG — это, по сути, XML с элементами разметки и возможностью встраивать скрипты и обработчики событий, поэтому недостаточно экранированный ввод в SVG исторически остаётся источником похожих уязвимостей — от подмены содержимого до выполнения кода. Разбор самого формата и того, почему в нём в принципе может «прятаться» код, — в нашем гайде чем открыть SVG и как он устроен.
В версии 16.3.6 Vercel обновила Satori до 0.33.5, добавив корректное экранирование значений перед их вставкой в SVG-вывод. Дополнительно в Next.js 15.5.26 добавлено усиление защиты и для линейки 15.5.
Риск реален только для приложений, которые одновременно выполняют два условия: используют Node.js-версию ImageResponse (не Edge Runtime) и передают в генерацию картинки данные, на которые может повлиять пользователь — заголовок статьи из CMS, параметр запроса, имя профиля и подобное. Такой паттерн типичен для динамических og-превью — их специально и придумали, чтобы каждая страница или пост получали уникальную картинку в соцсетях без ручной работы дизайнера.
Если сайт использует ImageResponse только с фиксированными, «зашитыми» в код текстами — риск ниже, но обновиться стоит в любом случае: код мог со временем обрасти новыми полями, о которых забыли.
npm ls next.ImageResponse из next/og, и проверьте, какие данные попадают в разметку JSX — особенно значения из query-параметров, заголовков запроса или пользовательского контента.Тема недоверенных данных в генерируемых файлах — не новая: похожим образом устроены и атаки через встроенные SVG-скрипты, о которых мы писали в материале SVG-стеганография и вредонос во флагах. Принцип один: любой формат, который умеет «содержать код» — SVG, XML, макросы в документах — требует осторожной обработки чужого ввода.
Данные приведены на 25 сентября 2026 по материалам The Hacker News, Checkmarx и security-advisory Vercel/Next.js. Номер CVE, рейтинг CVSS и версии указаны по первоисточникам.