С NextJS покончено... 13 НОВЫХ уязвимостей
원제 · Yeah it’s over for NextJS... 13 NEW vulnerabilities
핵심 요약
Обнаруженные 13 уязвимостей в Next.js и React требуют немедленного обновления версий фреймворков для предотвращения критических атак типа SSRF, DoS и обхода авторизации через middleware.
하이라이트
В React и Next.js обнаружено 13 новых уязвимостей (CVE), 6 из которых имеют высокий уровень серьезности.
Уязвимость SSRF с рейтингом 8.6 из 10 позволяет обходить файрволы и получать доступ к внутренним сервисам вроде Redis или баз данных.
Ошибка в десериализации протокола React Flight вызывает отказ в обслуживании (DoS), увеличивая время обработки запроса с 0,02 до 6 секунд за один цикл.
Межсайтовый скриптинг (XSS) с рейтингом 6.1 возникает при использовании стратегии beforeInteractive в тегах script из-за отсутствия экранирования в JSON.stringify.
Уязвимость Pages Router i18n позволяет извлекать конфиденциальные данные server-side props через прямой запрос к пути _next/data/ без авторизации.
Отравление кэша (Cache Poisoning) происходит из-за некорректной обработки расширения .rsc в строках запроса, что заставляет систему выдавать данные серверных компонентов вместо HTML.
타임라인
Обход Middleware и прокси в Pages Router
При использовании i18n английская и французская версии страниц защищаются корректно, однако базовый маршрут остается открытым. Злоумышленник может извлечь ID сборки из исходного кода страницы и составить прямой запрос к JSON-данным. Это позволяет получить такие данные, как email и заголовки, которые должны быть доступны только авторизованным пользователям.
- Включение i18n в конфигурации Next.js создает незащищенные маршруты для получения данных.
- Прямой запрос к URL вида _next/data/[build-id]/page.json позволяет получить доступ к server-side props в обход middleware.
- Ошибка в логике матчера игнорирует базовый путь страницы при наличии языковых префиксов.
Отказ в обслуживании (DoS) в серверных компонентах
Уязвимость затрагивает пакет react-server-dom и фреймворки на его основе. Атака заключается в добавлении огромного количества случайных ключей в payload Server Action. Это блокирует поток выполнения на сервере на несколько секунд, парализуя работу приложения. Новая система на основе курсора исключает повторные проходы по списку ключей, предотвращая зависание.
- Протокол React Flight уязвим к атакам через чрезмерное количество ключей в полезной нагрузке.
- Алгоритм поиска соответствий имел сложность k*n, что приводило к выполнению 200 миллионов операций сравнения строк при 200 000 ключах.
- Исправление через систему курсоров оптимизировало обработку до линейной сложности n+k.
Критическая уязвимость SSRF и обход файрвола
При обработке веб-сокет соединений функция resolveRoutes принимала произвольный целевой URL без надлежащей проверки принадлежности к приложению. Это позволяло через обычный curl-запрос получить доступ к локальным базам данных или Python-серверам, скрытым за внешним файрволом. Исправление добавляет проверку легитимности прокси-запроса на основе конфигурации рерайтов.
- Next.js некорректно проксирует запросы при наличии заголовка Upgrade: websocket.
- Злоумышленник может заставить сервер Next.js отправить запрос к закрытым внутренним сервисам внутри облачного контура.
- Уязвимость не затрагивает проекты, размещенные на платформе Vercel, но критична для self-hosted решений.
Отравление кэша (Cache Poisoning)
Атака проводится путем отправки запроса с заголовком React-Server-Component и специально сформированной строкой запроса. Поскольку система не распознает запрос как серверный компонент из-за символов после .rsc, она помечает ответ как HTML. В результате CDN выдает внутренние данные React Flight всем последующим посетителям страницы.
- Данные серверных компонентов могут ошибочно сохраняться в кэше CDN как обычный HTML.
- Проверка расширения .rsc игнорировала наличие строки запроса (query string) в конце URL.
- Следующий легитимный пользователь получает нечитаемую заплатку данных вместо отрендеренной страницы.
Межсайтовый скриптинг (XSS) в скриптах
Уязвимость возникает, когда данные из searchParams попадают в атрибуты тега script. Так как JSON.stringify не экранирует угловые скобки, злоумышленник может принудительно закрыть текущий скрипт и открыть новый с произвольным кодом. Это позволяет отображать поддельный интерфейс поверх легитимного сайта для фишинга данных пользователя.
- Стратегия beforeInteractive в сочетании с пользовательским вводом в атрибутах создает условия для XSS.
- JSON.stringify не выполняет автоматическое экранирование закрывающих тегов script.
- Злоумышленник может внедрять фальшивые формы входа или красть сессионные куки Chrome.
설명
В Next.js только что вышло обновление безопасности, исправляющее 13 уязвимостей (CVE), 6 из которых имеют высокий уровень критичности. В этом видео мы разбираем обход middleware, отказ в обслуживании (DoS) через протокол React Flight, подделку серверных запросов (SSRF) и межсайтовый скриптинг (XSS). Были ли серверные компоненты ошибкой? 🔗 Полезные ссылки Блог по безопасности: [https://vercel.com/changelog/next-js-may-2026-security-release](https://vercel.com/changelog/next-js-may-2026-security-release) ❤️ Узнать больше о нас Радикально лучший стек для мониторинга: [https://betterstack.com/](https://betterstack.com/) Текстовые туториалы: [https://betterstack.com/community/](https://betterstack.com/community/) Примеры проектов: [https://github.com/BetterStackHQ](https://github.com/BetterStackHQ) 📱 Соцсети Twitter: [https://twitter.com/betterstackhq](https://twitter.com/betterstackhq) Instagram: [https://www.instagram.com/betterstackhq/](https://www.instagram.com/betterstackhq/) TikTok: [https://www.tiktok.com/@betterstack](https://www.tiktok.com/@betterstack) LinkedIn: [https://www.linkedin.com/company/betterstack](https://www.linkedin.com/company/betterstack) 📌 Таймкоды: 00:00 Введение 00:41 Обход Middleware 03:50 Отказ в обслуживании (DoS) 07:50 Подделка запроса (Самая высокая критичность) 10:57 Отравление кэша 12:45 Межсайтовый скриптинг (XSS) 15:09 Ошибка
