Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
VectorFreed — Documenta a cadeia de RCE use-after-free do VectorFreed no librsvg (CVE-2026-96889) com um PoC gerador de SVG e orientações de remediação para librsvg, Next.js e Satori. | Kitploit
Ferramentas/GitHubGitHub/rafabd1/vectorfreed
Forensia de MemóriaAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebColeta de InformaçõesPapers e PesquisaExploração de Binários
GitHubrafabd1/vectorfreed

VectorFreed

Documenta a cadeia de RCE use-after-free do VectorFreed no librsvg (CVE-2026-96889) com um PoC gerador de SVG e orientações de remediação para librsvg, Next.js e Satori.

Ver Repositório
19178há 22h 58mAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

VectorFreed

Resumo

Este documento apresenta o "VectorFreed", uma cadeia de vulnerabilidades que começa com um use-after-free que eu (@rafabd1) encontrei no librsvg (CVE-2026-96889). Em uma build de Node.js/Sharp/libvips, esse bug levou à execução de comandos. Ele aborda o bug, os caminhos confirmados em aplicações até agora e as correções disponíveis no momento.

Detalhes

Um SVG pode incluir outro SVG por meio de XInclude. No caminho vulnerável, o librsvg começa a analisar um documento incluído enquanto o libxml2 ainda está expandindo uma entidade no documento externo. Se o SVG incluído declarar uma entidade com o mesmo nome, o librsvg substitui e libera a primeira entidade. O libxml2 ainda mantém um ponteiro para ela.

Quando a análise do documento incluído termina, o libxml2 continua com esse ponteiro antigo. A memória já pode pertencer a outra coisa nesse momento, então escritas posteriores podem corrompê-la. Um crash é um dos resultados. Em outros casos, isso também levou à execução de comandos.

Onde isso aparece

O atacante precisa de marcação SVG criada especificamente para alcançar o librsvg. Isso pode acontecer quando uma aplicação aceita um arquivo SVG, mas também pode acontecer quando a aplicação constrói um SVG a partir da entrada do usuário. Apenas usar o librsvg em algum lugar da árvore de dependências não estabelece um caminho explorável; a entrada precisa alcançar uma build afetada quando a imagem é renderizada.

Next.js

ImageResponse

A rota do Next.js que testamos aceitava texto em vez de um upload de SVG. Ela colocava esse texto dentro de um SVG inline para a versão Node.js do ImageResponse. Um bug de escaping separado no Satori permitia que o texto alterasse a marcação SVG gerada. O Sharp/libvips então passava esse SVG para o librsvg. A Vercel rastreou o caminho do Next.js como CVE-2026-94545. A versão Edge do ImageResponse não é afetada por esse caminho. Aqui está uma breve reprodução no Next.js.

Image Optimization

Uma segunda rota do Next.js alcançou o mesmo bug do librsvg por meio da API de Image Optimization. Quando uma fonte de imagem controlada pelo atacante era aceita pela API, uma imagem criada especificamente podia passar pela rejeição de SVG do framework e depois ser tratada como SVG pelo Sharp/libvips. Isso expôs a corrupção de memória upstream a requisições não autenticadas em Linux baseado em glibc sem usar o Satori ou o ImageResponse.

A Vercel publicou essa rota como GHSA-2464-fhr4-w9xw, sob o CVE-2026-96889 upstream. O advisory a classifica como Crítica com uma pontuação CVSS de 9.5.

Ghost

O Ghost tem um caminho diferente. Um usuário da equipe, incluindo um Contributor, podia criar um card de bookmark para um site que controlasse. O processamento da imagem do card podia então executar comandos no servidor do Ghost. O Ghost publicou isso como CVE-2026-105642.

Escopo

Durante esta pesquisa, identifiquei caminhos de entrada afetados em vários produtos downstream e confirmei a execução de comandos em vários deles, incluindo ambas as rotas do Next.js e o caso do Ghost acima. Como essa entrada alcança o librsvg varia de produto para produto. É por isso que um bug upstream em um parser de imagens pode aparecer em lugares que não parecem relacionados à primeira vista; o recente caso do libheif é outro exemplo. Isso não significa que todo produto que usa o librsvg seja explorável remotamente.

O que atualizar

  • librsvg: 2.63.2 tem a correção, com backports em 2.62.4, 2.61.5, 2.60.3, 2.57.5 e 2.56.6. Se você usa uma build de fornecedor mais antiga, verifique se ela inclui a correção. Consulte o aviso do librsvg.
  • Next.js (ImageResponse): As versões 16.2.0 a 16.3.5 são afetadas quando uma aplicação coloca valores controlados pelo atacante em conteúdo, atributos ou estilos SVG. Atualize para 16.3.6.
  • Next.js (Image Optimization): O aviso lista >= 10.0.0 <= 15.5.27 e > 16.0.0 <= 16.4.0 como afetadas. Atualize para 15.5.28 ou 16.4.1. O Sharp 0.35.5 ou posterior contém a correção upstream.
  • Ghost: O Ghost lista as versões >= 6.56.0 e < 6.67.0 como afetadas. Atualize para 6.67.0.
  • Satori: Se você o usa diretamente, a versão 0.33.5 corrige o bug de escaping separado usado na rota do Next.js.

Se você usa os binários pré-compilados do Sharp, verifique o pacote @img/sharp-libvips-* que sua aplicação instalou. Ele empacota o libvips e suas dependências, incluindo o librsvg. Atualizar a cópia do sistema do librsvg pode deixar sua aplicação usando a versão antiga.

PoCs e o que vem a seguir

O PoC de UAF inclui um gerador de SVG para vários caminhos de entrada e pode ser usado para verificar o use-after-free no início da cadeia.

O PoC de RCE do ImageResponse do Next.js do EQSTLab é um exemplo funcional dessa cadeia para sua build fixada de Node.js/Sharp. Ele gera e envia o payload automaticamente. Um exploit funcional já é público, então atualize as dependências afetadas ou mitigue o caminho de entrada o quanto antes.

[!WARNING] Não existe um PoC universal de RCE para esta cadeia. O exemplo do EQSTLab tem como alvo sua build fixada; outros alvos podem precisar de payloads diferentes. PoCs que dependem de <foreignObject> de SVG para execução de comandos não demonstram a cadeia descrita aqui.

Para validação inicial em outros alvos, o PoC de UAF é mais prático. Também publicarei o write-up técnico nas próximas semanas, com os passos do UAF até a execução de comandos e um post-mortem cobrindo este último mês de pesquisa sobre a cadeia.

Referências

  • Issue e correção do librsvg
  • Aviso RustSec do librsvg
  • Atualização de segurança do ImageResponse do Next.js e aviso
  • Aviso do Image Optimization do Next.js
  • Aviso do Ghost
  • Aviso do Satori
  • Post de reprodução do Next.js
Baixar ferramenta