
Este é um scanner para CVE-2025-29927.
Este é um scanner de nível profissional projetado para detectar a vulnerabilidade de bypass de middleware CVE-2025-29927 em aplicações Next.js.
X-Middleware-Subrequest criados para contornar o middleware do Next.jspip install -r requirements.txt playwright install
### Executar o scanner```bash
python main.py --domain https://example.com --threads 10 --timeout 10 --save
python main.py --help
| Opção | Descrição |
|----------------|--------------------------------------------|
| `--domain` | URL base do site alvo (obrigatório) |
| `--user-agent` | User-agent personalizado (padrão: string do Chrome) |
| `--timeout` | Tempo limite da solicitação (padrão: 10 segundos) |
| `--proxy` | Endereço do proxy (opcional) |
| `--save` | Salvar resultados em `results.txt` |
| `--threads` | Número de threads (padrão: 10) |
| `--wordlist` | Worlist inclui Caminhos Comuns |
---
## 🐳 Uso do Docker
### Construir a Imagem Docker```bash
docker build -t cve-scanner .
docker run -it --rm cve-scanner --domain https://example.com --save
---
## ⚙️ GitHub Actions
Este projeto inclui um workflow do GitHub Actions para testar a configuração no push. Ele:
- Instala dependências
- Instala navegadores Playwright
- Executa uma verificação `--help`
Veja `.github/workflows/python.yml`.
---
## 🧱 Estrutura```
.
├── main.py # Entry point
├── config.py # CLI parser
├── crawler.py # Playwright crawler
├── scanner.py # Multi-threaded vulnerability testing
├── requirements.txt
├── Dockerfile
└── .github/workflows
Visão Geral da Vulnerabilidade CVE-2025-29927
CVE-2025-29927 é uma falha crítica de segurança no Next.js que permite a invasores contornar a autenticação e autorização baseadas em middleware. Ao incluir um cabeçalho interno especial (X-Middleware-Subrequest) nas requisições HTTP, um invasor pode enganar o servidor Next.js para pular a execução do middleware, obtendo assim acesso a rotas protegidas. Na prática, uma requisição que normalmente seria bloqueada pelo middleware de autenticação (por exemplo, retornando 401/403 ou redirecionando para login) é processada normalmente se este cabeçalho estiver presente, efetivamente contornando as verificações de segurança. Esta vulnerabilidade afeta as versões do Next.js 11.1.4 até 15.2.2, e os administradores são instados a aplicar patches ou implementar mitigações (como remover este cabeçalho em proxies) para proteger suas aplicações.
Detectar esta vulnerabilidade em uma aplicação web requer descobrir endpoints internos e testá-los com o cabeçalho malicioso para verificar se o acesso não autorizado é possível. Abaixo está um plano de design para um script Python avançado que irá rastrear um site alvo (com suporte total a JavaScript) e escanear por CVE-2025-29927, atendendo a todos os requisitos especificados.
Para atender ao requisito de crawling profundo incluindo conteúdo renderizado por JavaScript, usaremos Playwright (preferível ao Selenium por sua velocidade e API moderna). Playwright é uma poderosa biblioteca de automação de navegador headless que pode lidar com aplicações web dinâmicas e frameworks JS modernos. Comparado ao Selenium, Playwright oferece uma API mais moderna (construída sobre o Protocolo Chrome DevTools) e suporta operação síncrona e assíncrona, o que pode proporcionar melhor desempenho para nosso caso de uso. As principais bibliotecas e suas instruções de instalação incluem:
pip install playwright e execute playwright install para obter os binários do navegador).requests por simplicidade ou httpx/aiohttp para suporte assíncrono. (Instalação: pip install requests ou pip install httpx).pip install beautifulsoup4).concurrent.futures.ThreadPoolExecutor do Python será usado (sem instalação extra). Se usar uma abordagem assíncrona, o asyncio do Python com httpx pode ser usado para requisições paralelas.pip install rich ou pip install colorama).Justificativa: Playwright é escolhido por sua capacidade de raspar conteúdo dinâmico sem grandes complexidades. “Usando Playwright podemos automatizar navegadores headless... para navegar na web como um humano, o que o torna ótimo para raspar sites dinâmicos com JavaScript”. Isso garante que nosso crawler possa ver links ou elementos de UI gerados por scripts (que um crawler simples baseado em requests perderia).
O módulo crawler usará Playwright em modo headless para realizar crawling profundo do site alvo. O objetivo é descobrir caminhos internos (endpoints) para testar, incluindo aqueles revelados apenas após a execução de JS. Pontos chave do design do crawler:
Navegação Headless do Navegador: Inicie uma instância do navegador (ex.: Chromium) em modo headless via Playwright. Use um Contexto de Navegador com um User-Agent personalizado se especificado pelo usuário (mais sobre isso na próxima seção). Por exemplo, podemos criar um contexto com browser.new_context(user_agent=<user_agent_string>) para emular o User-Agent escolhido. Se um proxy estiver configurado, aplique-o na inicialização (Playwright permite definir um servidor proxy ao iniciar o navegador ou contexto).
Estratégia de Crawling Recursivo: Comece a partir de uma URL base (seed). Use page.goto(base_url, timeout=<T>) para carregar a página (timeout configurável). Aguarde a rede ficar ociosa ou um pequeno atraso para permitir que o conteúdo dinâmico carregue, se necessário. Em seguida, extraia links. Podemos extrair links de duas formas:
links = page.evaluate("Array.from(document.querySelectorAll('a[href]'), a => a.href)"), ou<a href>.