Обработка SVG и кэширующие функции в Next.js открывают путь к удалённому выполнению кода

Next.js

Две уязвимости в Next.js открывают путь к выполнению произвольного кода на сервере без входа в систему. Третья позволяет перегрузить процессор и остановить обработку запросов. Под удар попадают приложения на версиях 15.5.27 и ниже, а также на ветке от 16.0.0 до 16.4.0. Упоминаний о применении этих уязвимостей в реальных атаках в уведомлениях Vercel нет.

Уязвимости Next.js в оптимизации изображений и Server Actions

Обновление вышло вне обычного графика. Два исправления перенесли из сентябрьского релиза безопасности: работа над ними зависела от вышестоящих библиотек, где сроки сдвинулись. Исправленные версии - 16.4.1 в активной ветке с длительной поддержкой и 15.5.28 в ветке сопровождения.

Удалённое выполнение кода через SVG

Самая давняя из трёх проблем живёт в API оптимизации изображений. Ей присвоен номер CVE-2026-96889. Речь о работе с памятью в библиотеке librsvg, которую Next.js использует для разбора SVG-файлов. Ошибка проявляется, когда в SVG-документе встречаются вложенные включения XML с повторяющимися объявлениями сущностей. Библиотека освобождает сущность, на которую ещё ссылается разборщик, и последующее обращение к этой области памяти может привести к выполнению чужого кода.

Запрос не требует учётных данных. Любой, кто может отправить картинку в API оптимизации изображений, способен попробовать эксплуатацию. Условие одно: Next.js должен работать в Linux с библиотекой glibc. Сборки на musl, включая Alpine, среди уязвимых в тексте уведомления не названы - командам стоит проверить свои базовые образы, а не полагаться на защищённость по умолчанию.

Red Hat, описавший эту ошибку в librsvg, ставит ей 7,8 балла по третьей версии CVSS. Это высокий уровень. Vercel в своём уведомлении относит ту же уязвимость к критическим: системы оценки у сторон разные.

Обходной путь - sharp версии 0.35.5 и выше. Обновление Next.js до исправленных версий подтягивает нужную версию sharp автоматически.

Выполнение кода в кэширующих функциях

Вторая критическая уязвимость касается только ветки 16 и приложений, где App Router работает вместе с Cache Components (компонентами кэша). Срабатывает она там, где кэширующая функция возвращает сразу несколько типизированных массивов - структур для работы с бинарными данными. Связанное уведомление опубликовали разработчики React. Патчи вышли в ветках 19.0, 19.1, 19.2 и 19.3 пакетов для серверных компонентов.

Обходных мер нет. Vercel просит обновляться немедленно, даже если функций, похожих на описанную, в приложении не нашлось. Разработчики React уточняют: уязвимость проявляется в редких случаях, когда ответ сервера передаёт несколько типизированных массивов вместе со значением, которым управляет атакующий.

Перегрузка процессора через Server Actions

Третья уязвимость отнесена к высокому уровню опасности. Составленные особым образом запросы заставляют приложение на App Router с хотя бы одной серверной функцией Server Action (код, который клиентская часть вызывает на сервере) расходовать процессорное время. Нагрузка блокирует остальные запросы в том же процессе, и сервис перестаёт отвечать.

Уязвимы версии начиная с 13.0.0. Приложения на Pages Router и проекты без Server Actions под угрозу не попадают. Родственное уведомление в React описывает ту же проблему для пакетов серверных компонентов; там помимо перегрузки процессора возможны сбои из-за нехватки памяти. Исправления перенесли в четыре поддерживаемые ветки React.

Что обновить и что проверить

Команда для ветки 15.5 - npm install next@15.5.28, для ветки 16 - npm install next@16.4.1. Загляните в файл блокировки зависимостей (lockfile) и убедитесь, что sharp в нём не ниже 0.35.5. Составьте список приложений, где включены Cache Components или Server Actions; просмотрите журналы запросов к API оптимизации изображений на необычные SVG-файлы. Контейнеры придётся пересобрать и развернуть заново, иначе в работающих экземплярах останутся старые зависимости.

Next.js лежит в основе множества рабочих проектов, а обе критические ошибки не требуют учётных данных и затрагивают функции, которые включены у большинства. Пока технические подробности не разошлись широко, у команд есть запас времени на обновление. Дальше риск быстрой эксплуатации растёт с каждым новым разбором механики атаки.

Ссылки

Комментарии: 0