O Next.js publicou a versão 16.3.6 fora do calendário normal para corrigir uma vulnerabilidade crítica no ImageResponse de next/og. Aplicações afetadas podem chegar à execução remota de código quando valores controlados por um atacante entram no conteúdo, nos atributos ou nos estilos de um SVG usado para gerar uma imagem.
A falha está registrada como CVE-2026-94545 e recebeu nota 9,5 no CVSS 4.0. O intervalo vulnerável é >=16.2.0 <16.3.6. A recomendação é atualizar mesmo que a aplicação não pareça exposta, porque o patch também traz dependências corrigidas para esse caminho de renderização.
O que o ImageResponse faz
O ImageResponse permite produzir imagens a partir de JSX. Um uso comum são imagens de Open Graph geradas para páginas de produto, perfis, artigos ou resultados compartilháveis. O Next.js transforma a árvore de elementos em SVG e depois produz a imagem entregue pela rota.
Esse fluxo frequentemente mistura um layout criado pelo desenvolvedor com dados dinâmicos: título de uma publicação, nome de usuário, parâmetros da URL ou texto vindo de uma API. É justamente aí que a origem do valor passa a importar.
Como a falha entra no Next.js
O problema original está no Satori, biblioteca usada para transformar JSX em SVG. Versões anteriores à 0.33.5 não escapavam corretamente certos valores antes de inseri-los no SVG gerado. Um valor preparado para o ataque podia ser interpretado como marcação SVG em vez de continuar como texto ou atributo.
No Satori isolado, o advisory classifica a falha como moderada porque o impacto depende do destino dado ao SVG. No caminho do ImageResponse executado no runtime Node.js pelo Next.js, a combinação com outras dependências pode levar a RCE, elevando a gravidade do problema no framework.
Quem está e quem não está afetado
Uma aplicação está no grupo de risco descrito pelo advisory quando reúne estes pontos:
- usa Next.js entre 16.2.0 e 16.3.5;
- gera imagens com
ImageResponsedenext/ogno runtime Node.js; - insere valores controlados por usuários ou requisições no conteúdo, nos atributos ou nos estilos de SVG.
A implementação de ImageResponse no runtime Edge não é afetada. Aplicações que não passam conteúdo controlado pelo atacante para o SVG também não atendem às condições descritas. Essa diferença ajuda a priorizar a investigação, mas não muda a recomendação de instalar a versão corrigida.
O Next.js 15.x não é afetado pela RCE. Ainda assim, a Vercel publicou o 15.5.26 com endurecimento relacionado. Para a linha 16.3, a versão corrigida é a 16.3.6.
Como verificar o projeto
O primeiro passo é conferir a versão realmente resolvida no lockfile e instalada no ambiente:
npm ls next
Depois, procure importações e chamadas de ImageResponse. Rotas de Open Graph e arquivos de geração de metadata são os lugares mais óbvios, mas o recurso pode aparecer em qualquer route handler.
rg "ImageResponse|next/og" app src pages
Em cada ocorrência, rastreie a origem dos valores usados no SVG. Query strings, headers, parâmetros de rota, campos de perfil e conteúdo editável por usuários devem ser tratados como entradas externas, mesmo quando passam antes por um banco de dados ou por outra API.
Atualização e mitigação
Na linha atual, a atualização indicada pelo projeto é:
npm install [email protected]
Equipes que usam outro gerenciador devem atualizar o mesmo pacote para a versão corrigida, revisar a alteração do lockfile, reconstruir a aplicação e fazer um novo deploy. Conferir apenas o package.json não basta se o ambiente continua usando uma imagem ou um artefato gerado antes do patch.
Quando não for possível atualizar imediatamente, o workaround oficial é impedir que valores controlados pelo atacante sejam renderizados no conteúdo, nos atributos ou nos estilos do SVG pelo ImageResponse em Node.js. É uma contenção temporária que exige conhecer todo o fluxo de dados; atualizar continua sendo a saída mais segura.
O que validar depois do patch
- confirme que produção está executando Next.js 16.3.6 ou uma versão posterior corrigida;
- gere novamente imagens de Open Graph com textos longos, caracteres especiais e valores vazios;
- verifique rotas que definem explicitamente
runtime = 'nodejs'; - revise caches de imagem e CDNs para não confundir uma resposta antiga com uma regressão do patch;
- mantenha a validação de entrada, mesmo depois da atualização, principalmente em geradores de imagem públicos.
Esta correção não é apenas uma troca preventiva de versão. Ela fecha um caminho em que uma falha de escaping, aparentemente limitada ao SVG, ganha outro impacto ao atravessar a cadeia de renderização no servidor. É um bom lembrete de que a gravidade de uma dependência também depende de onde e como sua saída é consumida.

