CVE-2026-89046 в Ubuntu: OOB-чтение в zstd-jni, уязвимые версии и защита

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 и применять временные меры защиты до установки исправлений.

Регулярная проверка версий пакетов и мониторинг логов помогут снизить риск компрометации.

Официальные источники​


  1. NVD — CVE-2026-89046
  2. Ubuntu OSV — CVE-2026-89046
  3. FIRST EPSS — CVE-2026-89046

История обновлений статьи​


  • 14.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ