Критическая уязвимость во фреймворке Next.js, официально обнаруженная 21 марта 2025 года, позволяет злоумышленникам обходить меры безопасности middleware (функции промежуточной обработки) путем простой манипуляции заголовка (header). В этой статье рассмотрено, что известно о CVE-2025-29927, как можно снизить риски, и как продукты Invicti (ранее Netsparker) помогают выявить и подтвердить наличие уязвимости в веб-приложениях.
Общая информация
Эта уязвимость (CVE-2025-29927) была подтверждена Next.js, одним из самых популярных фреймворков для создания веб-сайтов на базе React.
Middleware (функции промежуточной обработки) – это цепочка обработки, позволяющая программным модулям анализировать, изменять или перенаправлять HTTP-запрос до того, как он попадет в конечный обработчик кода. Туда часто внедряется аутентификация.
Недостаток позволяет полностью обойти функционал Next.js в приложении, включая критические функции безопасности, такие как аутентификация и авторизация.
На момент 25 марта 2025 года, все продукты Invicti могут обнаруживать и предоставлять отчет о CVE.
Уязвимость влияет на следующие версии Next.js:
- Next.js 11.1.4 – 13.5.6 (без патчей)
- Next.js 14.x до 14.2.25
- Next.js 15.x до 15.2.3
Единственным надежным способом устранения уязвимости является обновление до безопасной версии. Можно временно включить блокировку с помощью WAF на уровне прокси, однако это не является долгосрочным решением.
Риск обхода middleware в Next.js
Уязвимость позволяет злоумышленникам полностью обойти функционал middleware, добавляя заголовок x-middleware-subrequest к HTTP-запросам.
Особенно критической проблема является потому, что middleware в Next.js широко используется для аутентификации, авторизации, переписывания путей (path rewriting), применения заголовков безопасности, которые преступный хакер может легко обойти.
Кто в зоне риска?
Если ответы на оба вопроса – “да”, то приложение уязвимо (если оно не обновлено):
- Полагается ли веб-сайт на Next.js middleware для реализации мер безопасности?
- Запускается ли приложение с помощью next start с конфигурацией output: ‘standalone’?
Риск особенно велик, если:
- Middleware используется для проверки авторизации или аутентификации.
- Сайт полагается на middleware для применения заголовков безопасности (например, Content Security Policy – CSP), ограничивающих места, куда можно загружать ресурсы.
- Middleware применяется для переписывания путей для ограничения доступа к определенным маршрутам.
Не уязвимы:
- Программы, размещенные на Vercel или Netlify, так как эти платформы внедрили меры предосторожности на своих краевых (edge) уровнях.
- Программы, развернутые как статические экспорты (где middleware не выполняется).
Если команда не знает подробностей использования Next.js или хочет иметь возможность провести проверку на эту уязвимость, то использование автоматизированного решения DAST хорошо для этого подходит.
Как работает уязвимость middleware Next.js
Внутренний заголовок x-middleware-subrequest используется в Next.js, чтобы предотвратить запуск бесконечных циклов рекурсивных запросов. Уязвимость позволяет злоумышленнику манипулировать им так, чтобы Next.js не выполнял middleware.
Для разных версий Node.js эксплойт отличается:
- Для версий до 12.2: x-middleware-subrequest: pages/_middleware
- Для более поздних версий: x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
- (или src/middleware:src/middleware:src/middleware:src/middleware:src/middleware если используется директория src)
Когда заголовок содержит соответствующее значение, middleware полностью обходится, позволяя запросу не проходить проверки безопасности или модификации.
Как продукты Invicti обнаруживают CVE-2025-29927
Пассивное обнаружение через исследование трафика с динамическим анализом программных компонентов (Invicti)
Уязвимость выявляется путем пассивного мониторинга веб-трафика при сканировании. Invicti Enterprise использует эту технику со своей базой данных уязвимостей для обнаружения недостатка. Этот метод ищет в ответах заголовок x-powered-by: Next.js, который дает понять, что программа использует Next.js. Наличие уязвимой версии дополнительно подтверждается оценкой функции next.version в контексте JavaScript браузера для получения точной версии.
Затем решение сравнивает это значение с постоянно обновляемой базой данных известных CVE и сигнатур сетевого обнаружения, чтобы определить, уязвима ли эта версия.
На 25 марта 2025 года эта проверка доступна в Invicti Enterprise, Standard и Acunetix 360.
Активное обнаружение (Acunetix)
С понедельника, 24 марта 2025 года, проверка доступна всем клиентам Acunetix Premium.
Как она работает:
1. Определение использования middleware в Next.js: поиск характерных признаков middleware Next.js, в частности 307-перенаправления, когда тело (body) ответа равно значению заголовка location. Этот паттерн уникален для редиректов middleware Next.js.
2. Подтверждение наличия фреймворка Next.js: поиск заголовка x- powered-by: Next.js. в ответах.
3. Проверка полезными нагрузками:
- Для более поздних версий (13.2.0+): middleware:middleware:middleware:middleware:middleware (и вариант для src)
- Для версий до 12.2: pages/_middleware
- Для промежуточных версий (от 12.2 до 13.2.0): middleware
4. Дополнительные проверки:
- Отправка запроса с потенциальным заголовком обхода – возвращается ли ответ 200 OK.
- Контрольный запрос с измененным заголовком, например Y-Middleware-Subrequest, чтобы подтвердить, что все еще происходит редирект (307).
- Другой запрос с неправильным значением для подтверждения правильного поведения.
- Повторение удачного обхода.
5. Подтверждение уязвимости происходит после прохождения всех этапов проверки, что уменьшает риск ошибочных срабатываний.
Как устранить CVE-2025-29927
1. Немедленное обновление Next.js:
- 15.x → ≥ 15.2.3
- 14.x → ≥ 14.2.25
- 13.x → ≥ 13.5.9
- 12.x → ≥ 12.3.5
2. Временные меры, если сразу обновить невозможно:
- Блокировка заголовка x-middleware-subrequest на краевом уровне или прокси (не в самом middleware!).
- Пользователи Cloudflare могут включить соответствующее правило WAF (сейчас оно обозначено как необязательное в решении, потому что влияет на сторонние фреймворки аутентификации).
Компания Invicti благодарит Rachid Allam и Yasser Allam за их исследования, а также внутренние команды за оперативную реализацию проверки за один рабочий день.
Команда безопасности Invicti продолжает мониторинг ситуации и будет обновлять информацию по мере поступления.







