Критическая уязвимость Next.js Middleware: как обходят защиту и что делать

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

Критическая уязвимость Next.js Middleware: как обходят защиту и что делать

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

Как работает атака на Next.js Middleware

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

Проблема затрагивала версии Next.js до 15.2.3, а также более ранние ветки 14.x и 13.x. Vercel выпустила обновления для всех поддерживаемых версий: 13.5.9, 14.2.25, 15.2.3. Разработчикам настоятельно рекомендуется немедленно обновиться до этих версий или выше. В официальном разборе подчеркивается, что патч полностью устраняет возможность подделки заголовка, и теперь middleware выполняется корректно, игнорируя любые попытки вмешательства извне.

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

Middleware в Next.js — это мощный инструмент, который выполняется на периферии (edge) и позволяет обрабатывать запросы до того, как они достигнут серверных компонентов. Он часто используется для проверки авторизации, геолокации, A/B-тестирования и других задач, требующих быстрой реакции. Однако его безопасность зависит от того, что он не может быть обойден. Данная уязвимость стала возможной из-за того, что заголовок x-middleware-subrequest использовался для внутренних целей, но не был должным образом защищен от внешних манипуляций. Это классическая ошибка доверия к внутренним заголовкам, которая встречается в различных веб-фреймворках.

Это не первый случай, когда подобные заголовки становятся вектором атаки. Ранее в экосистеме Node.js и других фреймворков возникали проблемы с доверием к внутренним заголовкам, что приводило к серьезным утечкам данных. Vercel признала, что это была ошибка проектирования, и пообещала улучшить процессы проверки безопасности в будущем. Для разработчиков это важный урок: даже самые популярные и надежные инструменты могут содержать скрытые уязвимости, поэтому необходимо быть внимательными и своевременно обновляться.

Почему это опасно для вашего приложения

Для атаки злоумышленнику достаточно было добавить к HTTP-запросу заголовок x-middleware-subrequest с определенным значением, например, middleware или pages/middleware. В результате middleware пропускался, и запрос обрабатывался так, как если бы middleware не существовал. Это означало, что защита, реализованная в middleware, полностью игнорировалась. Представьте, что ваш сайт использует middleware для проверки, авторизован ли пользователь. Без этой проверки злоумышленник может получить доступ к административной панели, личным данным или выполнить действия от имени другого пользователя.

Опасность заключается в том, что многие разработчики полагаются на middleware для критически важных проверок, таких как аутентификация и авторизация. Если middleware обходится, злоумышленник может получить доступ к закрытым разделам сайта, выполнить действия от имени другого пользователя или украсть чувствительные данные. В некоторых случаях это может привести к полному компрометированию приложения, включая утечку баз данных и финансовых данных. Поэтому данная уязвимость требует немедленного реагирования.

Технические подробности и меры защиты

Vercel в своем разборе объясняет, что проблема была вызвана недостаточной валидацией значения заголовка. Внутренние подзапросы используют этот заголовок для того, чтобы middleware не выполнялся повторно, но внешние запросы не должны иметь возможности влиять на это. Исправление заключается в том, чтобы игнорировать заголовок, если он приходит от клиента, и доверять только внутренним вызовам. Патч изменяет логику обработки заголовка, чтобы он не мог быть подделан извне.

Разработчикам, использующим Next.js, рекомендуется немедленно обновиться до патченных версий. Также стоит проверить логи на предмет подозрительных запросов с заголовком x-middleware-subrequest. Если вы не можете обновиться немедленно, можно добавить собственную проверку в middleware, чтобы отклонять запросы с этим заголовком, но это лишь временная мера. Vercel также опубликовала инструменты для проверки, уязвим ли ваш сайт, что позволяет быстро оценить риски. В долгосрочной перспективе важно рассмотреть многоуровневую защиту, чтобы не полагаться только на middleware.

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

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

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

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

Vercel уже выпустила все необходимые патчи и продолжает мониторить ситуацию. В ближайшее время ожидаются дополнительные рекомендации по усилению безопасности middleware. Также вероятно, что в будущих версиях Next.js будут встроены дополнительные проверки для предотвращения подобных атак. Компания обещает улучшить процессы проверки безопасности, чтобы избежать подобных инцидентов в будущем.

Эксперты советуют следить за обновлениями безопасности и своевременно применять их. Кроме того, стоит рассмотреть использование альтернативных методов защиты, таких как серверные проверки в API-маршрутах или edge-функциях, которые менее подвержены подобным обходам. Также рекомендуется регулярно проводить аудит кода и использовать автоматические инструменты для поиска уязвимостей, чтобы выявлять проблемы на ранних стадиях.

Итог

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