Уязвимость Next.js CVE-2025-30218: как Middleware раскрывает данные и что делать

Разработчики Next.js из компании Vercel раскрыли информацию об уязвимости CVE-2025-30218, связанной с механизмом предотвращения рекурсии в Middleware. Проблема была обнаружена в ходе анализа другой недавней уязвимости CVE-2025-29927 и независимо подтверждена двумя исследователями безопасности. Эта у

Разработчики Next.js из компании Vercel раскрыли информацию об уязвимости CVE-2025-30218, связанной с механизмом предотвращения рекурсии в Middleware. Проблема была обнаружена в ходе анализа другой недавней уязвимости CVE-2025-29927 и независимо подтверждена двумя исследователями безопасности. Эта уязвимость затрагивает заголовок x-middleware-subrequest-id, который Next.js использует для отслеживания вложенных вызовов Middleware, и может привести к утечке данных или подделке запросов при определённых условиях.

Суть уязвимости CVE-2025-30218

Уязвимость затрагивает заголовок x-middleware-subrequest-id, который Next.js использует для отслеживания вложенных вызовов Middleware. Этот идентификатор добавляется ко всем исходящим запросам, включая те, что направляются на сторонние серверы. Если Middleware выполняет fetch-запрос к внешнему ресурсу, этот заголовок передаётся вместе с ним. Злоумышленник, контролирующий такой сторонний сервер, потенциально может использовать этот идентификатор для подделки запросов или обхода защиты.

Vercel подчёркивает, что эксплуатация маловероятна, так как требует контроля над третьей стороной. Тем не менее компания решила действовать на опережение, ускорив планы по удалению устаревшей логики предотвращения рекурсии. Эта логика не поддерживалась в новых версиях Middleware, адаптированных под Node.js runtime, и теперь разработчики стремятся к единообразию между рантаймами.

Как уязвимость может быть использована злоумышленниками?

Для эксплуатации злоумышленнику необходимо контролировать сервер, к которому Middleware отправляет fetch-запрос. Получив заголовок x-middleware-subrequest-id, он может попытаться подделать запросы к исходному приложению, имитируя внутренний вызов Middleware. Однако в реальных условиях это требует сложной цепочки действий, включая знание структуры приложения и возможность перехвата трафика. Например, если ваше приложение использует Middleware для обращения к API погоды, а этот API скомпрометирован, злоумышленник может получить идентификатор и отправить вредоносный запрос обратно к вашему приложению.

Предыстория и контекст

Проблема стала известна благодаря внутреннему аудиту после исправления CVE-2025-29927 — уязвимости низкой степени серьёзности, связанной с обходом Middleware. Тогда Next.js добавил проверку заголовка x-middleware-subrequest-id для каждого входящего запроса, но, как выяснилось, этот же заголовок не фильтруется при исходящих запросах. В результате данные, предназначенные для внутреннего использования, могут покинуть приложение.

Vercel отмечает, что это не первая подобная проблема: ранее компания уже планировала отказаться от механизма рекурсии в Middleware, но раскрытие CVE-2025-30218 подтолкнуло к немедленным действиям. В официальном сообщении подчёркивается, что инфраструктура Vercel защищена дополнительными мерами, и другие хостинг-провайдеры не затронуты, поскольку уязвимость специфична для реализации Vercel.

Технические подробности и исправление

Vercel выпустил патчи для всех поддерживаемых версий: 15.x, а также бэкпорты для 12.x, 13.x и 14.x. Это исключение из недавно опубликованной политики LTS, что подчёркивает серьёзность ситуации. Исправление заключается в удалении заголовка x-middleware-subrequest-id из исходящих запросов к сторонним ресурсам. В будущих версиях планируется полностью отказаться от этого механизма в пользу более безопасных методов.

Разработчикам рекомендуется как можно скорее обновить Next.js до последней патч-версии. Для пользователей Vercel дополнительных действий не требуется, так как платформа уже содержит защиту на уровне инфраструктуры. Однако для самодеплоенных приложений на других хостингах обновление критически важно.

Кого затронет и как

Уязвимость в первую очередь касается разработчиков, использующих Middleware с внешними HTTP-вызовами. Если ваше приложение делает fetch-запросы к сторонним API внутри Middleware, оно потенциально уязвимо. В зоне риска также проекты, где Middleware обрабатывает чувствительные данные, хотя сам заголовок не содержит конфиденциальной информации напрямую.

Для бизнеса, размещающего Next.js на Vercel, риски минимальны благодаря платформенной защите. Однако компании, использующие собственные серверы или других провайдеров, должны срочно обновиться. В России и СНГ, где популярны self-hosted решения, это особенно актуально.

Что будет дальше

Vercel планирует полностью удалить устаревшую логику предотвращения рекурсии из Middleware, унифицировав поведение для всех runtime. Компания также анонсировала новый процесс раскрытия уязвимостей в open-source пакетах и приглашает инфраструктурных провайдеров к сотрудничеству через partners@nextjs.org.

Ожидается, что в ближайших версиях Next.js появится более безопасный механизм для работы с вложенными вызовами Middleware. Разработчикам стоит следить за обновлениями и тестировать свои приложения после каждого патча.

Итог

CVE-2025-30218 — напоминание о том, что даже внутренние механизмы безопасности могут иметь побочные эффекты. Хотя уязвимость сложна в эксплуатации, её исправление делает Next.js надёжнее. Разработчикам стоит обновиться, а сообществу — внимательнее относиться к передаче данных между компонентами.