Уязвимость кэш-пуассонинга CVE-2025-32421 в Next.js: что нужно знать разработчикам

В популярном React-фреймворке Next.js обнаружена новая уязвимость кэш-пуассонинга, зарегистрированная как CVE-2025-32421. Эта проблема позволяет злоумышленнику отравить кэш сервера, подменяя содержимое страниц для последующих пользователей. Уязвимость затрагивает версии от 14.2.24 до 15.1.6, а также

В популярном React-фреймворке Next.js обнаружена новая уязвимость кэш-пуассонинга, зарегистрированная как CVE-2025-32421. Эта проблема позволяет злоумышленнику отравить кэш сервера, подменяя содержимое страниц для последующих пользователей. Уязвимость затрагивает версии от 14.2.24 до 15.1.6, а также более старые сборки, если предыдущий патч не был установлен. Разработчикам настоятельно рекомендуется немедленно обновить фреймворк до версий 15.1.7 или 14.2.25, чтобы защитить свои приложения от потенциальных атак.

Как работает уязвимость CVE-2025-32421

Суть проблемы кроется в возможности эксплуатации состояния гонки (race condition) при обработке параллельных запросов. Атакующий отправляет два запроса одновременно: первый содержит параметр ?nextDataRequest=1, а второй — заголовок x-now-route-matches. Из-за неправильной синхронизации сервер может обработать эти запросы в непредусмотренном порядке. В результате вредоносный ответ кэшируется, и все последующие пользователи, обращающиеся к тому же URL, получают подмененное содержимое. Такая атака особенно опасна для динамических страниц, где используются getServerSideProps или getStaticProps с параметрами.

Какие версии Next.js уязвимы?

Уязвимость подтверждена для всех версий Next.js, начиная с 14.2.24 и заканчивая 15.1.6 включительно. Если вы используете версию ниже 14.2.24 и не устанавливали предыдущий патч, ваше приложение также может быть под угрозой. Разработчикам из Vercel уже выпустили исправления: для ветки 14.x это версия 14.2.25, а для 15.x — версия 15.1.7. Настоятельно рекомендуется обновиться до этих версий как можно скорее.

Почему эта уязвимость — обход предыдущего патча

CVE-2025-32421 является прямым обходом исправления, которое было выпущено в версии 14.2.24 для аналогичной уязвимости. Первоначальный патч блокировал определенные комбинации параметров, но не учел возможность race condition между двумя разными типами запросов. Злоумышленники нашли способ обойти защиту, отправив запросы с разными параметрами параллельно. Это подчеркивает, насколько сложно полностью устранить уязвимости, связанные с состоянием гонки, и почему важно своевременно обновляться.

Технические детали атаки

Для проведения атаки злоумышленник отправляет два параллельных HTTP-запроса к уязвимому серверу. Первый запрос содержит параметр nextDataRequest=1, который обычно используется для получения данных при клиентской навигации. Второй запрос включает заголовок x-now-route-matches, который сообщает серверу, какие маршруты должны быть сопоставлены. Если сервер обрабатывает эти запросы одновременно, может возникнуть состояние гонки: сервер неправильно сопоставляет маршруты и кэширует ответ, предназначенный для другого URL. В результате злоумышленник может внедрить произвольное содержимое в кэш, которое увидят другие пользователи.

Кого затрагивает уязвимость и как защититься

Уязвимость в первую очередь представляет угрозу для приложений, использующих кэширование на CDN или на сервере. Если ваше приложение Next.js использует динамические маршруты с getServerSideProps или getStaticProps, вы находитесь в зоне риска. Атакующий может подменить содержимое страницы, чтобы распространять дезинформацию, фишинговые ссылки или вредоносный код. Для защиты необходимо выполнить три шага: обновить Next.js до исправленной версии, настроить CDN на удаление заголовка x-now-route-matches из входящих запросов и установить Cache-Control: no-store для ответов, которые могут быть уязвимы. Российским разработчикам, использующим Next.js в продакшене, рекомендуется проверить версию фреймворка и применить патч в ближайшее время.

Что делать после обновления

После установки обновления до версии 15.1.7 или 14.2.25 необходимо также проверить конфигурацию кэширования. Vercel рекомендует на уровне CDN блокировать заголовок x-now-route-matches для всех входящих запросов, так как он используется только для внутренних нужд. Кроме того, для страниц, которые могут быть подвержены атаке, установите Cache-Control: no-store, чтобы предотвратить кэширование подозрительных ответов. Регулярно следите за официальным блогом Vercel и списком рассылки безопасности Next.js, чтобы быть в курсе новых угроз и исправлений.

Итоги и рекомендации

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