Skip to main content

CVE-2025-29927: desvio de autorização no middleware do Next.js

Escrito por
blog feature code vulnerability warning

23 de março de 2025

0 minutos de leitura

The CRITICAL Next.js Vulnerability you NEED to be aware of...

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().

    export function middleware(req: NextRequest) {
      const token = req.cookies.get("auth-token")?.value;

      // Define protected routes
      const protectedRoutes = ["/admin"];

      if (protectedRoutes.some((route) => req.nextUrl.pathname.startsWith(route))) {
if (!token) {
  // Redirect to login page if not authorized
  const loginUrl = new URL("/login", req.nextUrl.origin);
  return NextResponse.redirect(loginUrl);
}
      }

      // Allow request to proceed
      return 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.

Documentação do Next.js para casos de uso de middleware

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:

    x-middleware-subrequest: middleware

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:

Painel de segurança mostrando o projeto vulnerable-nextjs-14-CVE-2025-29927 com um problema crítico no package.json.

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):

Detalhes da vulnerabilidade CVE-2025-29927 no Next.js identificada pela Snyk, com instruções para corrigi-la

É 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.