DevOps & Infra 4 min min de leitura 27 views

Otimizar uma imagem virou execução remota de código: o alerta crítico do Next.js

E
Eduardo Piasson
25 Aug 2026
Otimizar uma imagem virou execução remota de código: o alerta crítico do Next.js

O que foi publicado

Em 25 de agosto de 2026, o time do Next.js antecipou a release de segurança do mês e publicou as versões 16.3.3 e 15.5.24, corrigindo duas vulnerabilidades de severidade crítica. O pacote tem por volta de 45 milhões de downloads semanais — a escala aqui não é de nicho.

Falha 1 — otimização de imagem AVIF. Uma vulnerabilidade na biblioteca libheif, usada por baixo do sharp, pode levar a execução remota de código sem autenticação quando o Next.js otimiza uma imagem AVIF controlada pelo atacante. Como a correção real depende de propagação upstream, a versão corrigida desativa a otimização de AVIF até lá.

Falha 2 — CVE-2026-75604. Path traversal que leva a execução remota de código sem autenticação em servidores Next.js hospedados em Windows, afetando aplicações com Pages Router e com App Router sem Cache Components.

Se você roda Next.js em produção, a ação de hoje é atualizar. O resto deste texto é sobre por que isso vai acontecer de novo.

Ninguém no seu time escreveu um decodificador de AVIF

Vale seguir o caminho da falha: você escreveu <Image src=... />. O Next.js otimiza. Para otimizar, chama o sharp. O sharp delega a decodificação de AVIF para a libheif. A libheif é código C processando um formato de container de mídia complexo.

Três níveis abaixo da linha que você escreveu, existe um parser binário lendo bytes que vieram de fora. Essa é a categoria mais fértil de execução remota de código que existe — não por incompetência de quem mantém essas bibliotecas, mas porque decodificar formato de mídia arbitrário é intrinsecamente hostil: milhares de campos, tamanhos declarados pelo próprio arquivo, aritmética de ponteiro e uma superfície gigante.

A conclusão desconfortável: sua superfície de ataque é o que suas dependências fazem, não o que você escreveu. Auditar o próprio código não encontra isso. Nenhum code review pega uma falha que está três node_modules de distância.

Ação imediata, em ordem

  1. Atualize para 16.3.3 ou 15.5.24, conforme a sua linha. É a correção, não um paliativo.
  2. Se não der para subir hoje, desative a otimização de AVIF e restrinja remotePatterns no next.config para os domínios que você controla — nada de curinga.
  3. Se você roda em Windows, trate como prioridade máxima: a segunda falha é específica desse ambiente e não exige autenticação.
  4. Rode um inventário, não só um patch. npm ls sharp e npm ls libheif mostram onde mais isso entrou no projeto — muitas vezes há uma segunda cópia via outra dependência.

O padrão que resolve a próxima, não só esta

Corrigir a versão fecha esta porta. O trabalho de arquitetura é reduzir o que acontece quando a próxima abrir:

  • Nunca otimize imagem de origem arbitrária. Se o usuário pode apontar a URL, ele escolhe os bytes que o seu parser vai comer. Lista de domínios permitidos é a defesa mais barata que existe.
  • Tire processamento de mídia do processo do servidor. Container separado, usuário sem privilégio, sem acesso à rede interna, limite de memória e timeout. Se o parser cair, cai sozinho e não leva as suas credenciais junto.
  • Prefira o CDN ou um serviço dedicado para redimensionar e converter imagem. Você troca a responsabilidade por um contrato de fornecedor — e esse fornecedor patcheia antes de você.
  • Monitore o que o seu servidor web pode fazer. Um processo de renderização não deveria conseguir abrir socket para qualquer lugar nem ler fora do diretório da aplicação. Quando isso é verdade, RCE vira incidente contido em vez de comprometimento total.

A parte que dói

Esse não é um problema do Next.js. É um problema de qualquer stack moderno: você importa capacidade e importa junto a superfície de ataque de tudo que aquela capacidade usa por dentro.

A pergunta que separa um time preparado de um time com sorte não é "minhas dependências têm vulnerabilidade?" — todas têm, o tempo todo. É "quando uma delas for explorada, o que exatamente o atacante consegue alcançar a partir dali?". Quem sabe responder isso atualiza com calma. Quem não sabe descobre no pior dia possível.

Compartilhar

Newsletter

Novos artigos direto no seu email.

✓ Verifique seu email para confirmar a inscrição.

Posts relacionados