CVE-2025-29927: desvio de autorização no middleware do Next.js
23 de março de 2025
0 minutos de leitura
CVE-2025-29927: desvio de autorização no middleware do Next.js
Na manhã de sexta-feira, 21 de março de 2025, às 9h UTC, foi publicado um aviso de segurança referente à CVE-2025-29927. O aviso apontou uma vulnerabilidade crítica, com gravidade 9,1, em aplicações Next.js amplamente utilizadas.
Versões do Next.js consideradas vulneráveis:
Versões 15.x do Next.js anteriores à 15.2.3
Versões 14.x do Next.js anteriores à 14.2.25
Versões 13.x do Next.js anteriores à 13.5.9
Todas as versões do Next.js até a versão corrigida 13.5.9 são consideradas vulneráveis, mas o comunicado de vulnerabilidade da Vercel observou que uma solução alternativa ou uma correção retroportada poderia ser lançada em breve.
Recomendamos que todos os desenvolvedores atualizem para a versão mais recente do Next.js que inclui a correção e a implantem para evitar o desvio crítico de autorização e outras formas de contornar a lógica do middleware.
Escopo do impacto da CVE-2025-29927
A Vercel anunciou que essa vulnerabilidade não afeta aplicações hospedadas na plataforma de hospedagem da Vercel.
A Netlify, outra plataforma popular de hospedagem na web, anunciou que essa vulnerabilidade não afeta aplicações implantadas na Netlify.
A Cloudflare, frequentemente usada como CDN, mas que também pode hospedar aplicações Next.js, permite que os desenvolvedores ativem uma regra de WAF gerenciada como solução alternativa opcional.
Sobre o middleware do Next.js
O conceito de middleware do Next.js foi inspirado no framework de aplicações web Express. A ideia do middleware é definir um predicado HTTP que pode modificar e redirecionar uma solicitação HTTP recebida, além de determinar como ela será processada por um servidor Node.js.
A definição de middleware do Next.js segue uma assinatura de função semelhante à do Express: recebe um objeto de solicitação HTTP (NextRequest) e retorna um NextResponse para forçar um comportamento específico, como retornar uma resposta HTTP 401 Unauthorized, redirecionar a solicitação ou permitir que o processamento continue por meio da diretiva NextResponse.next().
Como mencionado na documentação oficial do Next.js, os desenvolvedores costumam usar middleware para tomar decisões de autenticação e autorização, como validar um cookie ou JWT na solicitação antes de permitir o acesso a rotas restritas e protegidas.

Desvio de autorização no Next.js
Os pesquisadores de segurança Allam Rachid e Allam Yasser, que investigaram e relataram essa vulnerabilidade (assim como vulnerabilidades anteriores do Next.js), demonstraram como clientes externos podem contornar a lógica do middleware ao enviar solicitações a rotas protegidas pelo Next.js por meio dele.
Para contornar o middleware, os clientes precisam incluir o seguinte cabeçalho HTTP nas solicitações:
A lógica do Next.js processa o cabeçalho HTTP x-middleware-subrequest para decidir como e quando permitir que as solicitações prossigam sem passar pelo middleware, evitando loops infinitos. No entanto, essa lógica apresenta falhas nas versões vulneráveis do Next.js mencionadas acima e permite que qualquer solicitação recebida por um servidor Next.js contorne o middleware se o cabeçalho HTTP x-middleware-subrequest estiver presente com um valor específico.
Observação para reproduzir o problema: o valor exato do cabeçalho HTTP varia de acordo com a versão do Next.js.
Fui afetado pela CVE-2025-29927, o desvio de autorização do Next.js?
Os desenvolvedores que usam o Snyk Open Source para detectar vulnerabilidades em dependências no IDE, no Git SCM, no CI ou no fluxo de monitoramento da Snyk receberão um alerta sobre a CVE-2025-29927, como mostra este repositório do GitHub importado para projetos da Snyk:

Os detalhes da vulnerabilidade do Next.js na Snyk indicam um caminho de atualização (por exemplo, next@14.2.25, no meu caso). Além disso, os usuários da Snyk podem corrigir rapidamente a vulnerabilidade com um clique (ou optar por automatizar todo o processo):

É provável que você esteja usando uma versão afetada e vulnerável ao desvio de autorização no Next.js se:
Você estiver usando versões do Next.js da 11.1.4 à 13.5.6
Você estiver hospedando por conta própria versões vulneráveis do Next.js (14.x < 14.2.25 ou 15.x < 15.2.3)
Como corrigir a CVE-2025-29927 e soluções alternativas
Há correções e medidas de mitigação disponíveis, dependendo da versão do Next.js que você usa e de onde faz a implantação:
Atualize para uma versão corrigida do Next.js usando a versão mais recente dos ramos 14.x ou 15.x.
Aplique uma regra de firewall que impeça solicitações HTTP externas com o cabeçalho x-middleware-subrequest de chegar à infraestrutura interna da aplicação Next.js.
As implantações na Vercel e na Netlify não são afetadas, conforme informado por essas plataformas de hospedagem em nuvem.
Conheça o cenário atual da segurança de código aberto
Entenda as tendências e abordagens atuais para proteger softwares de código aberto e a cadeia de suprimentos.
