CVE: CVE-2026-89046
Продукт: Ubuntu
Дата публикации: 10.09.2026
Критичность: HIGH
CVSS: 8.8 (4.0)
EPSS: 0,57%; процентиль 45,46%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В библиотеке zstd-jni обнаружена уязвимость, позволяющая нарушителю вызвать чтение памяти за границами буфера через передачу отрицательного смещения. В Ubuntu 24.04 LTS и 26.04 LTS затронут пакет zstd-jni-java. Статья разбирает механику атаки, условия эксплуатации и способы проверки статуса системы.
Основные характеристики
Уязвимость позволяет атакующему инициировать чтение памяти вне выделенных границ, что может привести к утечке данных или падению JVM. Риск реализуется при обработке специально сформированных данных через API библиотеки.
- Тип ошибки: CWE-125 (Out-of-bounds Read) — чтение данных за пределами выделенного буфера.
- CVSS 4.0: 8.8 (HIGH). Вектор:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X.
- Условия атаки: Сеть (AV:N), низкая сложность (AC:L), отсутствие требований к аутентификации (PR:N), отсутствие взаимодействия пользователя (UI:N).
- Эксплуатация: Публичные данные о массовой эксплуатации в CISA KEV отсутствуют.
- EPSS: 0,57% (процентиль 45,46%) — вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
Какие продукты и версии затронуты
Согласно данным Ubuntu OSV, уязвимость затрагивает следующие дистрибутивы и пакеты:
- Ubuntu 24.04 LTS (Noble):
- Пакет:
zstd-jni-java
- Версия:
1.5.2-5+ds-3build1
- Бинарные пакеты:
libzstd-jni-java,libzstd-jni1
- Пакет:
- Ubuntu 26.04 LTS (Resolute):
- Пакет:
zstd-jni-java
- Версия:
1.5.2-5+ds-8
- Бинарные пакеты:
libzstd-jni-java,libzstd-jni1
- Пакет:
Обратите внимание, что в Ubuntu используется версия 1.5.2, которая формально не входит в диапазон версий 1.5.5-6 — 1.5.7-13, указанный в описании CVE. Однако Ubuntu классифицирует эти версии как уязвимые (severity: medium), что может быть связано с наличием аналогичного кода или переносом патчей. Рекомендуется опираться на официальную базу данных безопасности Ubuntu.
Причина уязвимости
Причина уязвимости кроется в функции
Zstd.getFrameContentSize в Java-обвязке библиотеки zstd-jni.Функция принимает параметр
srcPosition, который используется для указания смещения в буфере данных. В уязвимых версиях отсутствует валидация на отрицательные значения этого параметра.Когда передается отрицательное смещение, оно обходит проверки границ (bounds checks) на стороне Java и передается в нативный парсер заголовков фреймов (frame-header parser) в C-коде. Нативный код интерпретирует отрицательное значение как валидный индекс, что приводит к обращению к памяти за пределами выделенного буфера.
Как работает атака
Атакующий взаимодействует с приложением, использующим библиотеку zstd-jni для сжатия или анализа данных.
Через API
Zstd.getFrameContentSize атакующий передает специально сформированные данные, в которых смещение (srcPosition) имеет отрицательное значение.Из-за отсутствия проверки на отрицательные значения в Java-коде, управление передается в нативную часть библиотеки. Нативный парсер пытается прочитать заголовок фрейма по вычисленному адресу, который указывает на память вне границ буфера.
В результате происходит чтение произвольных данных из памяти процесса (information disclosure) или сбой JVM (denial of service), если доступ к памяти запрещен или данные некорректны.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо выполнение следующих условий:
- Целевая система использует библиотеку zstd-jni в уязвимой версии (в контексте Ubuntu — пакет
zstd-jni-java).
- Приложение предоставляет атакующему возможность управлять параметрами, передаваемыми в функцию
Zstd.getFrameContentSize, в частности, значением смещения.
- Атакующий имеет сетевой доступ к приложению, обрабатывающему данные через эту библиотеку.
- Не требуется предварительная аутентификация или взаимодействие пользователя.
Возможный сценарий атаки
Предположим, что веб-сервис принимает архивные данные и использует zstd-jni для проверки их целостности или извлечения метаданных.
Атакующий отправляет HTTP-запрос с телом, содержащим специально сформированный буфер данных. В этом буфере параметры, используемые при вызове
getFrameContentSize, настроены так, чтобы передать отрицательное смещение.Приложение вызывает уязвимую функцию. Java-код не отклоняет отрицательное значение, и оно передается в нативный код.
Нативный парсер пытается прочитать данные по адресу, вычисленному на основе отрицательного смещения. Это приводит к чтению памяти, содержащей, например, ключи шифрования, другие данные пользователей или служебную информацию процесса. В худшем случае процесс аварийно завершается.
Есть ли публичный эксплойт
На момент публикации данных в пакет доказательств не подтверждено наличие публичного эксплойта в открытом доступе.
В каталоге CISA KEV (Known Exploited Vulnerabilities) CVE-2026-89046 отсутствует.
Существуют ссылки на техническое описание уязвимости и коммит с исправлением в репозитории проекта, но подтвержденных фактов массовой эксплуатации в реальных атаках в предоставленных источниках нет.
Отсутствие сведений о публичном эксплойте не означает, что он не существует, но указывает на то, что угроза пока не реализована в широком масштабе.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости в предоставленных источниках не раскрыты.
Однако можно использовать следующие неспецифичные признаки для мониторинга:
- Аварийные завершения (crashes) Java-процессов, использующих zstd-jni, с ошибками, связанными с доступом к памяти (Segmentation fault, SIGSEGV).
- Необычные запросы к API, обрабатывающему сжатые данные, с аномальными параметрами смещения.
- Утечки данных в логах, если приложение логирует содержимое буферов при обработке ошибок.
Эти признаки требуют корреляции с другими событиями безопасности для подтверждения факта атаки.
Как обнаружить атаку
Для обнаружения попыток эксплуатации рекомендуется:
- Мониторить логи приложений на наличие ошибок, связанных с zstd-jni, особенно сообщений о нарушении доступа к памяти.
- Анализировать сетевой трафик на предмет аномальных запросов к эндпоинтам, использующим сжатие zstd, с подозрительными параметрами.
- Использовать инструменты динамического анализа (fuzzing) для проверки приложений, взаимодействующих с zstd-jni, на устойчивость к отрицательным смещениям.
- Проверять журналы безопасности (audit logs) на наличие подозрительной активности, связанной с чтением памяти процессов.
Как проверить свою версию
Для проверки версии пакета
zstd-jni-java в Ubuntu используйте следующие команды:
Bash:
cat /etc/os-release
uname -r
apt-cache policy zstd-jni-java
ubuntu-security-status
Команда
apt-cache policy zstd-jni-java покажет установленную версию и доступные обновления. Замените <имя-пакета> на zstd-jni-java при необходимости. Команда ubuntu-security-status поможет проверить, есть ли доступные обновления безопасности для системы.Исправление
Основным способом устранения уязвимости является обновление пакета
zstd-jni-java до исправленной версии.- Для Ubuntu 24.04 LTS и 26.04 LTS следите за официальными уведомлениями безопасности Ubuntu и устанавливайте обновления, когда они станут доступны.
- В исходном проекте zstd-jni исправление было выпущено в версии 1.5.7-14. Однако в Ubuntu версии пакетов отличаются, поэтому ориентируйтесь на данные из
ubuntu-security-statusи официальных репозиториев.
- Если обновление недоступно, рассмотрите возможность отключения или ограничения доступа к функциям, использующим
Zstd.getFrameContentSize, с отрицательными смещениями.
Временные меры защиты
Пока обновление не установлено, можно применить следующие временные меры:
- Ограничить доступ к API, вызывающему
Zstd.getFrameContentSize, только для доверенных источников.
- Внедрить проверку входных данных на стороне приложения, чтобы отклонять отрицательные значения смещения перед передачей в библиотеку.
- Использовать механизмы изоляции (sandboxing) для Java-процессов, чтобы ограничить последствия возможного чтения памяти.
- Включить строгие политики безопасности JVM, если это применимо, для минимизации риска утечки данных.
Как проверить устранение уязвимости
После установки обновлений проверьте их эффективность:
- Убедитесь, что версия пакета
zstd-jni-javaсоответствует исправленной, используяapt-cache policy zstd-jni-java.
- Проведите тестирование приложения с использованием специально сформированных данных, содержащих отрицательные смещения, чтобы убедиться, что они корректно обрабатываются или отклоняются.
- Проверьте логи на наличие ошибок после обновления. Отсутствие ошибок при обработке тестовых данных свидетельствует об успешном исправлении.
- Используйте
ubuntu-security-statusдля подтверждения, что все известные уязвимости в системе устранены.
Вывод
CVE-2026-89046 представляет собой уязвимость в библиотеке zstd-jni, позволяющую нарушителю вызвать чтение памяти за границами буфера. В Ubuntu 24.04 LTS и 26.04 LTS затронут пакет
zstd-jni-java.Хотя публичная эксплуатация пока не подтверждена, риск утечки данных или отказа в обслуживании реален. Администраторам рекомендуется отслеживать обновления безопасности Ubuntu и применять временные меры защиты до установки исправлений.
Регулярная проверка версий пакетов и мониторинг логов помогут снизить риск компрометации.
Официальные источники
История обновлений статьи
- 14.09.2026 — Опубликована первая версия материала.
