
Uma funcionalidade usada para gerar imagens dinâmicas de Open Graph pode se transformar em uma superfície de execução de código quando dados controlados por um atacante entram no pipeline de SVG. A CVE-2026-94545 afeta a implementação Node.js do ImageResponse no Next.js 16.2.0 até 16.3.5; a versão 16.3.6 corrige o caminho vulnerável.
O Next.js é amplamente usado para aplicações web modernas, e a geração automática de imagens para compartilhamento em redes sociais parece, à primeira vista, uma função distante das áreas mais sensíveis de uma aplicação. A CVE-2026-94545 mostra por que essa leitura pode ser enganosa: uma rota criada para montar uma imagem de pré-visualização pode receber dados de uma requisição, transformá-los em conteúdo SVG e alcançar componentes executados no servidor.
O advisory oficial do Next.js classifica o problema como crítico, com CVSS 9,5, porque, sob as condições corretas, o efeito pode chegar à execução remota de código (RCE). O ataque é remoto, não exige privilégios prévios nem interação do usuário, mas possui uma condição importante: a aplicação precisa usar a implementação Node.js de ImageResponse e inserir dados controlados pelo atacante em conteúdo, atributos ou estilos SVG.
Uma rota de imagem pode virar superfície de execução
O ImageResponse, disponível por meio de next/og, é usado para gerar imagens em tempo de execução, como cards de Open Graph, prévias para redes sociais e outras peças montadas dinamicamente a partir de dados da aplicação. É comum que essas rotas recebam títulos, nomes de perfis, parâmetros de URL, informações vindas de um CMS ou outros valores externos para compor a imagem.
O problema aparece quando uma dessas entradas não confiáveis chega ao processo de geração do SVG sem o escape correto. O componente upstream Satori, utilizado na cadeia de renderização, não escapava adequadamente determinados valores antes de inseri-los no SVG gerado. Com dados especialmente preparados, o conteúdo deixa de ser tratado apenas como informação e pode ser interpretado como marcação.
No Satori, o impacto depende de como o SVG resultante é consumido, e o advisory upstream atribuiu severidade moderada, com CVSS 5,3. No contexto específico do Next.js executando ImageResponse no runtime Node.js, entretanto, a mesma falha alcança uma cadeia com potencial de RCE, razão pela qual o advisory do Next.js recebe severidade crítica. Essa diferença é relevante: o número do CVE é o mesmo, mas o risco operacional muda conforme o componente downstream e a forma como a saída vulnerável é processada.
Nem toda aplicação Next.js está exposta
A condição de exposição é mais restrita do que uma leitura superficial do CVE pode sugerir. Segundo o advisory oficial, o intervalo vulnerável do Next.js é 16.2.0 até versões anteriores à 16.3.6. Aplicações que usam a implementação Edge do ImageResponse não são afetadas por esse caminho. Da mesma forma, uma aplicação Node.js que não coloca valores controlados externamente dentro do conteúdo, dos atributos ou dos estilos SVG não atende à condição descrita para exploração.
Isso transforma o inventário de versão em apenas a primeira pergunta. A equipe precisa descobrir se existem rotas que utilizam next/og, qual runtime está ativo nessas rotas e de onde vêm os valores usados para gerar as imagens. Parâmetros de URL, cabeçalhos, formulários, dados de perfis, conteúdo editorial e informações persistidas em banco podem se tornar entrada não confiável se um usuário externo conseguir influenciá-los.
Há ainda uma diferença importante entre “o pacote está presente” e “o caminho vulnerável é alcançável”. Em aplicações complexas, uma dependência vulnerável pode existir no lockfile sem que a funcionalidade correspondente esteja exposta. Em outras, uma única rota pública de geração de imagem pode ser suficiente para criar a condição de ataque. Esse é um caso típico em que reachability e contexto de execução precisam acompanhar a leitura do CVSS.
Ataques de dentro para fora: quando a ameaça chega por uma dependência confiável
Servidores Vite expostos viram alvo: como evitar o vazamento de segredos na nuvem
PoC público e exploração em até 48 horas: quando a fila de vulnerabilidades precisa mudar
O que uma RCE nesse caminho pode significar para o negócio
Quando uma vulnerabilidade permite executar código no servidor, o impacto deixa de estar limitado ao conteúdo da imagem. O que acontece depois depende dos privilégios do processo, dos segredos disponíveis no ambiente, da segmentação de rede e da arquitetura de implantação. Um processo com acesso a variáveis de ambiente, credenciais de serviços, armazenamento, filas, APIs internas ou bancos de dados pode oferecer ao atacante um alcance muito maior do que a rota que originou o comprometimento.
Em ambientes com privilégios excessivos, uma exploração bem-sucedida pode abrir caminho para leitura de segredos, alteração de conteúdo, execução de processos, acesso a serviços internos, indisponibilidade e movimentação para outros componentes. Em arquiteturas mais restritivas, containers com privilégios mínimos, egress controlado, identidades de workload limitadas e segmentação reduzem o blast radius, mesmo sem eliminar a vulnerabilidade.
O contexto da hospedagem também importa. A Netlify informou que, em sua plataforma, os controles de isolamento limitam o impacto conhecido desse problema ao encerramento da função afetada, em vez de permitir execução arbitrária no ambiente subjacente. Essa mitigação é específica daquela plataforma e não deve ser projetada automaticamente sobre aplicações self-hosted ou outros provedores. A lição é mais ampla: a mesma CVE pode produzir consequências distintas conforme a fronteira de confiança e os privilégios do runtime.
A correção começa pela versão, mas não termina no package.json
A medida principal é atualizar o Next.js para 16.3.6 ou versão posterior e reconstruir a aplicação. Alterar apenas a declaração da dependência não garante que o artefato em produção tenha sido substituído. Imagens de container, bundles, funções serverless, caches de build, ambientes de homologação, previews de branch e implantações antigas também precisam ser inventariados e redeployados.
Organizações que utilizam o Satori diretamente devem atualizar para 0.33.5 ou posterior. O advisory do projeto é explícito ao afirmar que não existe um workaround completo equivalente ao patch. Quando a atualização imediata não for possível, a mitigação recomendada é impedir que conteúdo controlado por atacantes seja renderizado pelo Satori ou chegue a conteúdo, atributos e estilos SVG processados pelo ImageResponse Node.js.
Migrar temporariamente uma rota para a implementação Edge pode reduzir a exposição porque esse caminho não aparece como afetado no advisory, mas a mudança deve ser testada em relação a compatibilidade, comportamento de renderização e arquitetura de implantação. A migração não substitui a necessidade de tratar dependências vulneráveis e manter uma versão suportada.
Como reduzir a exposição além do patch
O primeiro controle estrutural é rastrear as entradas externas até a geração da imagem. A equipe precisa saber quais valores podem ser influenciados por visitantes, usuários autenticados, conteúdo de terceiros ou integrações e em que ponto esses dados entram no SVG. Validação ajuda, mas não deve ser tratada como substituta do escape correto e do patch, especialmente em linguagens de marcação nas quais diferentes contextos — texto, atributo e estilo — exigem tratamentos distintos.
O segundo é reduzir os privilégios do runtime. A aplicação não precisa ter acesso irrestrito ao sistema de arquivos, à rede interna ou a todas as credenciais do ambiente apenas porque gera imagens. Separar identidades de workload, restringir egress, limitar permissões de container e evitar segredos desnecessários no processo diminui a consequência de uma eventual execução de código.
O terceiro é tornar a dependência visível. SCA, SBOM, lockfiles e inventário de imagens de container ajudam a localizar versões afetadas e a identificar cópias esquecidas em pipelines, branches e ambientes de teste. Esse caso se relaciona diretamente ao risco de cadeia de software: a aplicação pode estar corretamente escrita em sua camada de negócio e ainda herdar uma falha crítica de um componente usado na renderização.
Depois da atualização, ambientes que ficaram expostos publicamente devem ser avaliados de acordo com o risco. Não há, até o fechamento desta notícia, evidência pública confirmada de exploração ativa registrada na avaliação SSVC associada ao CVE. A ausência de exploração conhecida, porém, não prova que um ambiente específico não foi atacado. Se a rota vulnerável ficou acessível e surgirem eventos anômalos, a resposta deve incluir análise de logs, processos executados, conexões de saída, alterações persistentes e uso de credenciais. A rotação de segredos faz sentido quando houver evidência ou suspeita razoável de que o processo comprometido poderia tê-los exposto.
O problema maior é tratar funções “auxiliares” como fora do modelo de ameaça
Geradores de miniaturas, conversores de documentos, mecanismos de preview, parsers, renderizadores e ferramentas usadas em pipelines costumam ser percebidos como componentes periféricos. Na prática, eles recebem dados complexos e frequentemente operam no lado servidor, exatamente onde uma falha de parsing, serialização ou escape pode ganhar consequência operacional.
A CVE-2026-94545 reforça uma disciplina que vai além do Next.js: qualquer transformação entre formatos deve ser tratada como uma fronteira de confiança. Dados que entram como texto podem virar HTML, SVG, PDF, imagem ou comando de uma biblioteca nativa. Cada transição precisa preservar a separação entre dado e instrução, enquanto o runtime precisa permanecer limitado ao mínimo de recursos necessários.
Referências
- Remote Code Execution in next/og ImageResponse
- Improper escaping in Satori-generated SVG
- Next.js ImageResponse security release: what to know
- CVE-2026-94545 Detail
- Node.js ImageResponse Implementation Vulnerability Enables Remote Code Execution
Conclusão
A CVE-2026-94545 combina duas características que merecem atenção: está em uma funcionalidade que pode passar despercebida no inventário de superfícies críticas e, quando as condições de exposição existem, o impacto potencial chega à execução remota de código. Ao mesmo tempo, a vulnerabilidade não autoriza generalizações sobre todas as aplicações Next.js. Versão, runtime e fluxo de dados definem se o caminho vulnerável está realmente presente.
Para as equipes de segurança e desenvolvimento, a resposta mais eficiente é objetiva: localizar versões afetadas, identificar rotas ImageResponse, verificar a origem dos dados usados no SVG, atualizar para a versão corrigida e reduzir privilégios do runtime. O valor do trabalho não está apenas em “fechar uma CVE”, mas em impedir que uma função de geração de imagem continue operando como uma fronteira de confiança invisível dentro da aplicação.
CISA propõe uma “era da qualidade” para o CVE diante do avanço das vulnerabilidades
IA encurta a janela do patch: correções de segurança podem virar pistas para novos ataques
IA acelera descoberta de vulnerabilidades e transforma remediação no novo gargalo
Tutor LMS: falha CVE-2026-78175 pode permitir execução remota de código em sites WordPress


Be the first to comment