Categorias do Site

Vulnerabilidade no middleware do Next.js

Vulnerabilidade crítica no Next.js permite burlar segurança. Atualize para a versão corrigida e proteja suas rotas.

Imagem abstrata com fundo em gradientes de rosa e roxo e logo preto com letra 'N' em branco no centro.

Resumo: Uma vulnerabilidade crítica de autenticação no Next.js (CVE-2025-29927) permite que invasores ignorem verificações de middleware ao falsificar o cabeçalho x-middleware-subrequest. Afeta versões de 11.1.4 até início da 15.x. Hospedagens gerenciadas, como Vercel, estão seguras, mas apps autohospedados que dependem de middleware para controle de acesso estão em risco. Atualize para uma versão corrigida (13.5.6, 14.2.24, 15.2.2+) ou adicione verificações de autenticação diretamente nas rotas protegidas se não puder atualizar ainda.


Vulnerabilidade no Middleware do Next.js

O Next.js esteve recentemente no centro de uma grande controvérsia de desenvolvimento web devido a uma vulnerabilidade crítica que permite que usuários não autenticados ignorem seus mecanismos de autorização. Esta vulnerabilidade foi atribuída à referência CVE-2025-29927 e possui uma pontuação CVSS 3.1 de 9.1.

A vulnerabilidade afeta todas as versões do Next.js da 11.1.4 até (mas não incluindo) as versões corrigidas: 13.5.6, 14.2.24 e 15.2.2.

O que é esta vulnerabilidade?

Descoberta por dois pesquisadores de segurança, zhero e inzo, ao analisar o código-fonte do Next.js, essa vulnerabilidade permite que invasores ignorem verificações de segurança manipulando um cabeçalho HTTP interno chamado x-middleware-subrequest. O middleware geralmente é onde são realizadas essas verificações para garantir que os usuários possam acessar certas páginas e redirecioná-los com base em seu papel.

Por exemplo, ao criar um aplicativo SaaS, você normalmente verificaria no middleware se um usuário é um cliente pagante antes de permitir o acesso a recursos pagos ou redirecioná-lo para a página de preços caso não seja:

// middleware.js

import { NextResponse } from 'next/server';

// Funções auxiliares
async function isValidSession(sessionToken) {
  …
}

async function isPaidUser(sessionToken) {
  …
}

export async function middleware(request) {

  const { pathname } = request.nextUrl;

  // Caminhos para o painel de controle e página de preços
  const dashboardPath = '/dashboard';
  const pricingPath = '/pricing';

  // Verifique se o usuário está tentando acessar o painel ou qualquer área de recursos pagos
  if (path.startsWith(dashboardPath) || path.startsWith('/paid-features')) {
    // Obtenha o cookie da sessão
    const session = request.cookies.get('session')?.value;

    // Se a sessão não for válida, redirecione para login
    if (!session || !(await isValidSession(session))) {
      return NextResponse.redirect(new URL('/login', request.url));
    }

    // Verifique se o usuário é um usuário pagante
    if (!(await isPaidUser(session))) {
      // Se não for um usuário pagante, redirecione para a página de preços
      return NextResponse.redirect(new URL(pricingPath, request.url));
    }

    // Se o usuário tiver uma sessão válida e for um usuário pagante, permita o acesso
    return NextResponse.next();
  }

  // Para outros caminhos, continue com a solicitação
  return NextResponse.next();
}

Esta vulnerabilidade de middleware dá aos invasores uma maneira de ignorar essas verificações e acessar rotas protegidas em seu aplicativo, basicamente permitindo que usem recursos pagos sem pagar.

Como a vulnerabilidade funciona

A vulnerabilidade gira em torno do cabeçalho x-middleware-subrequest, que é destinado a prevenir recursão infinita de middleware. Ao adicionar manualmente este cabeçalho com o valor correto, um invasor pode enganar o Next.js fazendo-o pensar que o middleware já foi executado cinco vezes, quando na verdade não foi executado nenhuma vez.

Como corrigir e evitar a vulnerabilidade

Atualize para a versão mais recente do Next.js (v15). Se não puder atualizar, adicione verificações de segurança extras diretamente dentro das rotas protegidas. Por exemplo, em uma página de administração, faça:

import { getServerSession } from 'next-auth/next';
import { authOptions } from '@/app/api/auth/[...nextauth]/route';
import { redirect } from 'next/navigation';

export default async function DashboardPage() {

  const session = await getServerSession(authOptions);

  // Verificação da sessão
  if (!session) {
    redirect('/api/auth/signin');
  }

  // Verificação de integridade da sessão
  const isSessionValid = verifySessionIntegrity(session);
  if (!isSessionValid) {
    redirect('/api/auth/signout?error=session-integrity');
  }

  return (
     …
      );
}

// Função auxiliar
async function verifySessionIntegrity(session) {
  // Verifique sinais de adulteração da sessão
  if (!session.user?.email || !session.user?.id) return false;

  // Compare com o registro do banco de dados para consistência
  const userRecord = await getUserFromDb(session.user.id);
  if (!userRecord) return false;

  return true;
}

A vulnerabilidade é séria para aplicativos que expõem dados sensíveis, como relatórios internos ou documentos confidenciais, que não estão estritamente vinculados a uma conta de usuário.

  • Enfrentando a Complexidade com GraphQL

    Descubra como GraphQL facilita o desenvolvimento de soluções inteligentes com IA.

    Descubra como GraphQL facilita o desenvolvimento de soluções inteligentes com IA.

    Ler notícia completa
    Banner de podcast da UX Magazine intitulado
  • UX: Emoções Além das Telas no Design

    Descubra como o design emocional transforma experiências, indo além das telas e criando conexões humanas.

    Descubra como o design emocional transforma experiências, indo além das telas e criando conexões humanas.

    Ler notícia completa
    Símbolo abstrato em tons de marrom e laranja que se assemelha a uma pessoa estilizada com braços estendidos e uma perna erguida.
  • Como usar CSS line-clamp para limitar texto

    Aprenda a usar a propriedade CSS line-clamp para limitar linhas de texto e melhorar a aparência do layout.

    Aprenda a usar a propriedade CSS line-clamp para limitar linhas de texto e melhorar a aparência do layout.

    Ler notícia completa
    Fundo gradiente em tons de laranja e violeta com o texto
  • Promise.all ainda é relevante em 2025?

    Antes das promises serem introduzidas nativamente no JavaScript, usávamos muitos callbacks para tarefas assíncronas. É comum ver callbacks sendo usados, pois muitos desenvolvedores podem ainda pensar que callbacks e promises são o mesmo, mas não são. Quando promises foram introduzidas, substituíram amplamente os callbacks, tornando a sintaxe mais compreensível. Em 2025, com async/await, Promise.allSettled, Promise.any […]

    Promise.all é crucial para tarefas assíncronas, mas novas alternativas surgem em 2025. Saiba quando usá-lo.

    Ler notícia completa
    Logotipo do JavaScript (JS) em quadrado amarelo sobre fundo com ondas suaves em tons de branco e cinza claro.
  • Equilibrando IA e UX: O Desafio do Design Humanizado

    A IA está sendo integrada aos fluxos de trabalho de design modernos, ajudando na geração de conteúdo, ideação e prototipagem. Isso aumenta a eficiência das equipes de design, aprimorando a forma como criamos, pensamos e resolvemos problemas. No entanto, a IA também traz preocupações ao processo de design, como a possível perda de foco no […]

    Descubra como manter o design UX humanizado enquanto utiliza IA para otimizar processos e aumentar a produtividade.

    Ler notícia completa
    Mão robótica branca tocando a ponta do dedo de uma mão humana contra um fundo colorido em tons de arco-íris.
  • A Revolução dos Navegadores com IA: Impactos e Futuro

    Há uma revolução silenciosa ocorrendo em um software que você usa diariamente, mas raramente pensa sobre: o navegador. Chrome, Safari, Firefox têm sido nossas janelas para a web por décadas. Agora, algo significativo está acontecendo. Uma nova espécie de navegador está surgindo: o navegador com IA. Ele não apenas muda como navegamos, mas redefine o […]

    Navegadores com IA estão mudando a web, impactando a criatividade, economia e verdade online.

    Ler notícia completa
    Tela de interface do Instacart mostrando produtos essenciais para praia à venda, como protetor solar e toalhas, com uma janela de chat com o assistente virtual aberta.
  • As 3 previsões para o futuro do design UX

    A evolução tecnológica moderniza e melhora todas as áreas da tecnologia, incluindo o design de dispositivos digitais, automação, desenvolvimento de software e design UI/UX. Essa evolução e as inovações em HCI (Interação Humano-Computador) impulsionam o design UI/UX para ajudar designers a criar produtos digitais mais amigáveis, usáveis e produtivos para todos os usuários. O design […]

    Confira as três principais previsões para a próxima era do design UX e como elas podem impactar o futuro das interfaces digitais.

    Ler notícia completa
    Ilustração em 3D de um computador desktop moderno com ícones em estilo futurista na tela, sobre fundo roxo com linhas de rede digitais.
  • A Importância do Enquadramento no Design

    No design, o enquadramento do problema está se tornando o cerne do papel humano. À medida que a IA, ou o que chamo de Programa, assume mais o trabalho de solução, nosso ofício muda para como tratamos o problema. “A IA não está substituindo designers; está substituindo designers que focam em saídas automatizáveis.” Citação e […]

    Explorando como o enquadramento de problemas redefine o papel humano no design em tempos de IA.

    Ler notícia completa
    Imagem de rabisco em preto e branco cheia de palavras e desenhos, incluindo cabeças estilizadas, uma palavra
  • Psicologia Ética no E-commerce: Facilite Compras

    A psicologia no e-commerce tem uma má reputação, muitas vezes associada a táticas de manipulação como escassez artificial e cobranças ocultas. No entanto, existe um lado positivo: a facilitação das compras sem manipulação. Trabalhando anos com e-commerce, percebi que a maioria dos problemas de conversão está em facilitar o processo de compra. Vou mostrar quatro […]

    Aprenda como remover barreiras psicológicas no e-commerce, promovendo compras éticas sem manipulação.

    Ler notícia completa
    Ilustração de um trator removendo neve da estrada, com carros vermelhos parcialmente cobertos de neve ao lado. Ambiente frio com árvores ao fundo.