С NextJS покончено... 13 НОВЫХ уязвимостей

원제 · Yeah it’s over for NextJS... 13 NEW vulnerabilities

16:033분 읽기Better Stack2026. 05. 11.컴퓨터/소프트웨어 · 경제 뉴스 · AI/미래기술

핵심 요약

Обнаруженные 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.

타임라인

  1. Обход Middleware и прокси в Pages Router

    При использовании i18n английская и французская версии страниц защищаются корректно, однако базовый маршрут остается открытым. Злоумышленник может извлечь ID сборки из исходного кода страницы и составить прямой запрос к JSON-данным. Это позволяет получить такие данные, как email и заголовки, которые должны быть доступны только авторизованным пользователям.

    • Включение i18n в конфигурации Next.js создает незащищенные маршруты для получения данных.
    • Прямой запрос к URL вида _next/data/[build-id]/page.json позволяет получить доступ к server-side props в обход middleware.
    • Ошибка в логике матчера игнорирует базовый путь страницы при наличии языковых префиксов.
  2. Отказ в обслуживании (DoS) в серверных компонентах

    Уязвимость затрагивает пакет react-server-dom и фреймворки на его основе. Атака заключается в добавлении огромного количества случайных ключей в payload Server Action. Это блокирует поток выполнения на сервере на несколько секунд, парализуя работу приложения. Новая система на основе курсора исключает повторные проходы по списку ключей, предотвращая зависание.

    • Протокол React Flight уязвим к атакам через чрезмерное количество ключей в полезной нагрузке.
    • Алгоритм поиска соответствий имел сложность k*n, что приводило к выполнению 200 миллионов операций сравнения строк при 200 000 ключах.
    • Исправление через систему курсоров оптимизировало обработку до линейной сложности n+k.
  3. Критическая уязвимость SSRF и обход файрвола

    При обработке веб-сокет соединений функция resolveRoutes принимала произвольный целевой URL без надлежащей проверки принадлежности к приложению. Это позволяло через обычный curl-запрос получить доступ к локальным базам данных или Python-серверам, скрытым за внешним файрволом. Исправление добавляет проверку легитимности прокси-запроса на основе конфигурации рерайтов.

    • Next.js некорректно проксирует запросы при наличии заголовка Upgrade: websocket.
    • Злоумышленник может заставить сервер Next.js отправить запрос к закрытым внутренним сервисам внутри облачного контура.
    • Уязвимость не затрагивает проекты, размещенные на платформе Vercel, но критична для self-hosted решений.
  4. Отравление кэша (Cache Poisoning)

    Атака проводится путем отправки запроса с заголовком React-Server-Component и специально сформированной строкой запроса. Поскольку система не распознает запрос как серверный компонент из-за символов после .rsc, она помечает ответ как HTML. В результате CDN выдает внутренние данные React Flight всем последующим посетителям страницы.

    • Данные серверных компонентов могут ошибочно сохраняться в кэше CDN как обычный HTML.
    • Проверка расширения .rsc игнорировала наличие строки запроса (query string) в конце URL.
    • Следующий легитимный пользователь получает нечитаемую заплатку данных вместо отрендеренной страницы.
  5. Межсайтовый скриптинг (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 Ошибка

커뮤니티 글

모든 글 보기
이 영상에 대해 글쓰기