CVE: CVE-2026-76098
Продукт: Ubuntu
Дата публикации: 24.08.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: 0,28%; процентиль 19,86%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Библиотека mistune в Ubuntu уязвима к отказу в обслуживании через рекурсивный парсинг Markdown. Ошибка затрагивает все поддерживаемые LTS-релизы, включая 24.04 и 26.04. В материале разобран механизм атаки, перечень уязвимых версий пакетов и команды для проверки статуса системы.
Основные характеристики
Уязвимость позволяет нарушителю отправить специально сформированный Markdown-документ, который приводит к падению процесса парсинга. Это не дает доступа к данным, но останавливает работу сервиса.
- Тип ошибки: CWE-674 (Uncontrolled Recursion). Библиотека не ограничивает глубину вложенности токенов при рендеринге.
- CVSS: 7.5 (HIGH). Вектор
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:Hуказывает на сетевую атаку без необходимости авторизации.
- Эксплуатация: В каталоге CISA KEV подтверждений о массовом использовании в реальных атаках нет.
- EPSS: 0,28% (процентиль 19,87%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
Какие продукты и версии затронуты
Уязвимость затрагивает пакет
mistune во всех LTS-релизах Ubuntu, начиная с 16.04. В официальных базах данных Ubuntu OSV указаны следующие версии исходного пакета и бинарных модулей:- Ubuntu 16.04 LTS (xenial):
mistune0.7.1-1, бинарные пакетыpython-mistuneиpython3-mistuneверсии 0.7.1-1.
- Ubuntu 18.04 LTS (bionic):
mistune0.8.3-2, бинарные пакетыpython-mistuneиpython3-mistuneверсии 0.8.3-2.
- Ubuntu 20.04 LTS (focal):
mistune0.8.4-2, бинарный пакетpython3-mistuneверсии 0.8.4-2.
- Ubuntu 22.04 LTS (jammy):
mistune2.0.0-1+really0.8.4-1, бинарный пакетpython3-mistuneверсии 2.0.0-1+really0.8.4-1.
- Ubuntu 24.04 LTS (noble):
mistune3.0.2-1, бинарный пакетpython3-mistuneверсии 3.0.2-1.
- Ubuntu 26.04 LTS (resolute):
mistune3.1.4-1, бинарный пакетpython3-mistuneверсии 3.1.4-1.
Важно: в базах данных Ubuntu для всех перечисленных версий поле
availability не заполнено, что означает отсутствие готовых исправлений в репозиториях на момент публикации данных.Причина уязвимости
Причина ошибки кроется в логике рендеринга HTML-вывода в библиотеке mistune. При обработке последовательных символов-звездочек парсер создает глубоко вложенные токены для форматирования (emphasis).
Функция
HTMLRenderer.render_token() использует рекурсию для обработки этих вложенных структур. Поскольку глубина вложенности не ограничена, при обработке специально сформированного документа количество рекурсивных вызовов превышает системный лимит Python, что приводит к исключению RecursionError и аварийному завершению процесса.Как работает атака
Атакующий направляет на сервис, использующий mistune для парсинга Markdown, документ, содержащий длинную последовательность символов
*.Парсер интерпретирует эти символы как вложенные теги форматирования. При переходе к HTML-рендерингу функция
render_token() начинает рекурсивно обрабатывать каждый уровень вложенности.Из-за отсутствия проверки глубины рекурсия продолжается до исчерпания стека вызовов Python. Процесс парсинга падает с ошибкой
RecursionError, что приводит к отказу в обслуживании.Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо:
- Сетевой доступ: Возможность отправить данные на сервис, который использует уязвимую версию mistune для обработки Markdown.
- Отсутствие авторизации: Вектор CVSS указывает, что для отправки вредоносного документа не требуется учетная запись (PR:N).
- Целевая конфигурация: Сервис должен быть настроен на использование HTML-рендерера mistune для обработки входных данных.
Возможный сценарий атаки
Пользователь или автоматизированный скрипт отправляет на веб-интерфейс или API-эндпоинт Markdown-строку, состоящую из тысяч последовательных символов
*.Сервер принимает запрос и передает его в модуль парсинга. Библиотека mistune начинает строить дерево токенов, где каждый символ увеличивает глубину вложенности.
При вызове HTML-рендерера происходит переполнение стека рекурсии. Процесс, обслуживающий запрос, аварийно завершается. Если сервис работает в одном процессе, это может привести к остановке всего приложения.
Есть ли публичный эксплойт
В официальных источниках и базах данных CVE подтвержден факт наличия уязвимости и выпущен фикс в версии 3.3.3. Однако в каталоге CISA KEV нет записей о подтвержденной эксплуатации в реальных атаках.
Публичные PoC (Proof of Concept) или готовые эксплойты в предоставленных источниках не указаны. Отсутствие сведений в KEV не гарантирует, что эксплойт не существует, но указывает на то, что массовое использование пока не зафиксировано.
Признаки эксплуатации
Специфичных индикаторов компрометации (IOC) для этой уязвимости в источниках не раскрыто. Поскольку атака приводит к падению процесса, а не к установке вредоносного кода, следы будут связаны с отказом в обслуживании.
Общие неспецифичные признаки, которые стоит проверять:
- Резкое увеличение количества ошибок
RecursionErrorв логах Python-приложений.
- Внезапные перезапуски сервисов, использующих парсинг Markdown.
- Пиковые значения нагрузки на CPU или память в момент отправки запросов с длинными строками.
Как обнаружить атаку
Для обнаружения попыток эксплуатации следует анализировать логи приложений и системные журналы.
- Логи приложений: Ищите сообщения об исключении
RecursionErrorв стеках вызовов, связанных с модулемmistune.
- Сетевой трафик: Мониторьте входящие HTTP-запросы, содержащие аномально длинные последовательности символов
*в теле запроса или параметрах.
- Мониторинг доступности: Настройте алерты на падение доступности сервисов, которые обрабатывают Markdown-контент.
Как проверить свою версию
Для проверки, установлена ли уязвимая версия mistune в вашей системе Ubuntu, выполните следующие команды. Замените
<имя-пакета> на mistune или python3-mistune в зависимости от того, какой пакет установлен.
Bash:
cat /etc/os-release
uname -r
apt-cache policy mistune
ubuntu-security-status
Команда
apt-cache policy покажет установленную версию и доступные обновления. Если в выводе отсутствует строка с версией 3.3.3 или выше, система потенциально уязвима.Исправление
Основной способ устранения уязвимости — обновление библиотеки mistune до версии 3.3.3 или выше, где исправлена логика рекурсивного рендеринга.
Для систем, где обновление через apt недоступно (так как в базах данных Ubuntu для всех LTS-релизов
availability не заполнено), рекомендуется:- Обновление из PyPI: Если приложение использует виртуальное окружение, обновите пакет через
pip install mistune>=3.3.3.
- Замена реализации: Рассмотрите возможность замены mistune на другую библиотеку парсинга Markdown, которая не имеет этой уязвимости.
- Патч-менеджмент: Отслеживайте официальные обновления от Canonical, так как исправление может быть выпущено в будущих обновлениях безопасности.
Временные меры защиты
Пока не выпущено официальное обновление для Ubuntu, можно применить следующие временные меры:
- Ограничение длины ввода: На уровне веб-сервера или API-шлюза ограничьте максимальную длину принимаемых Markdown-документов.
- Фильтрация символов: Если бизнес-логика позволяет, отфильтруйте или экранируйте последовательности символов
*в пользовательском вводе до передачи в парсер.
- Изоляция процесса: Запускайте парсер Markdown в отдельном изолированном процессе или контейнере, чтобы падение не влияло на основной сервис.
Как проверить устранение уязвимости
После обновления или применения временных мер необходимо убедиться, что уязвимость устранена.
- Проверка версии: Убедитесь, что установленная версия mistune равна 3.3.3 или выше.
- Функциональное тестирование: Отправьте тестовый запрос с длинной последовательностью символов
*и убедитесь, что сервис не падает, а корректно обрабатывает или отклоняет запрос.
- Мониторинг: Наблюдайте за логами в течение нескольких дней после обновления, чтобы убедиться в отсутствии ошибок
RecursionError.
Вывод
CVE-2026-76098 представляет собой риск отказа в обслуживании для всех сервисов в Ubuntu, использующих mistune для парсинга Markdown. Уязвимость затрагивает все LTS-релизы, и на момент публикации данных официальных исправлений в репозиториях Ubuntu нет.
Администраторам следует проверить версии установленных пакетов, применить временные меры по ограничению ввода и подготовить план обновления до версии 3.3.3, как только оно станет доступно.
Официальные источники
История обновлений статьи
- 29.08.2026 — Опубликована первая версия материала.
