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

CVE: CVE-2026-87823
Продукт: Ubuntu
Дата публикации: 09.09.2026
Критичность: HIGH
CVSS: 8.8 (4.0)
EPSS: 0,43%; процентиль 36,54%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В библиотеке zstd-jni, поставляемой в Ubuntu 24.04 и 26.04, обнаружена уязвимость, позволяющая нарушителю инициировать чтение памяти за пределами выделенного буфера. Это может привести к остановке Java-процесса или утечке данных. Статья разбирает механику ошибки, затронутые версии пакетов и способы проверки и устранения.

Основные характеристики​


Уязвимость позволяет атакующему вызвать чтение памяти за границами буфера в Java-приложениях, использующих zstd-jni. Это может привести к падению процесса (DoS) или утечке информации из памяти JVM.

  • Тип ошибки: CWE-190 (Integer Overflow or Wraparound). Ошибка возникает из-за использования 32-битных знаков при проверке границ.
  • 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. Высокий балл обусловлен удаленным доступом и серьезным влиянием на доступность.
  • CVSS 3.1 (Ubuntu): 8.8 (HIGH). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H.
  • EPSS: 0,43% (процентиль 36,54%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
  • Статус: Уязвимость подтверждена, исправление доступно в версии 1.5.7-14.

Какие продукты и версии затронуты​


Уязвимость затрагивает пакет zstd-jni-java в следующих версиях Ubuntu:

  • Ubuntu 24.04 LTS (Noble): версия пакета 1.5.2-5+ds-3build1.
  • Ubuntu 26.04 LTS (Resolute): версия пакета 1.5.2-5+ds-8.

Затронуты бинарные пакеты libzstd-jni-java и libzstd-jni1. Все версии, предшествующие 1.5.7-14, считаются уязвимыми.

Причина уязвимости​


Причина ошибки заключается в некорректной реализации проверки границ (bounds check) в нативном коде библиотеки zstd-jni.

В трех методах, работающих с direct-ByteBuffer для определения размера фрейма, используются 32-битные знаковые целые числа для проверки смещений. Когда атакующий передает отрицательное значение смещения, близкое к Integer.MIN_VALUE, или значение, вызывающее переполнение, проверка границ срабатывает некорректно.

В результате нативный код пытается прочитать память по вычисленному смещению, которое выходит за пределы выделенного буфера. Это приводит к чтению данных из некартированной памяти или из других областей памяти JVM.

Как работает атака​


Атака эксплуатирует логическую ошибку в проверке границ в нативных методах JNI.

  1. Атакующий формирует входные данные, содержащие отрицательное смещение (offset) или значение, вызывающее переполнение 32-битного целого.
  2. Java-код передает это значение в нативный метод через direct-ByteBuffer.
  3. Нативный код выполняет проверку границ, используя 32-битную знаковую арифметику. Из-за переполнения или отрицательного значения проверка не блокирует доступ.
  4. Происходит чтение памяти за пределами буфера (Out-of-Bounds Read).

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

  • Если адрес некартирован, JVM может завершиться аварийно (Segmentation Fault).
  • Если адрес соответствует другим данным в памяти JVM, атакующий может извлечь информацию (например, размер фрейма или другие данные), что представляет риск утечки информации.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо:

  • Наличие Java-приложения, использующего уязвимую версию библиотеки zstd-jni (до 1.5.7-14).
  • Возможность передать контролируемые данные в методы, обрабатывающие direct-ByteBuffer для определения размера фрейма.
  • Отсутствие дополнительных механизмов защиты, которые бы валидировали смещения на уровне Java-кода перед вызовом нативных методов.

Возможный сценарий атаки​


Типичный сценарий атаки предполагает, что злоумышленник взаимодействует с сервисом, сжимающим или разжимающим данные с помощью zstd-jni.

  1. Атакующий отправляет специально сформированный запрос, содержащий вредоносные значения смещений в заголовке или метаданных данных.
  2. Сервисный процесс (JVM) принимает данные и вызывает методы zstd-jni для обработки.
  3. Из-за ошибки в проверке границ нативный код читает память за пределами буфера.
  4. В худшем случае процесс JVM аварийно завершается, что приводит к отказу в обслуживании (DoS).
  5. В случае успешного чтения валидной памяти атакующий может получить доступ к конфиденциальным данным, находящимся в памяти процесса.

Есть ли публичный эксплойт​


Публичный эксплойт или PoC (Proof of Concept) для CVE-2026-87823 не подтвержден в доступных официальных источниках на момент подготовки статьи.

Однако наличие подробного технического описания ошибки и ссылки на исправляющие коммиты в репозитории GitHub позволяет предположить, что эксплойт может быть разработан относительно легко. Отсутствие публичного PoC не означает, что уязвимость не может быть эксплуатирована.

Признаки эксплуатации​


Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы.

Общие признаки, которые могут указывать на попытку эксплуатации (неспецифичные):

  • Аварийные завершения Java-процессов (JVM crashes) с ошибками сегментации (Segmentation Fault) в логах.
  • Необъяснимые сбои в сервисах, использующих сжатие/разжатие данных.
  • Аномальные запросы с необычными значениями в заголовках или метаданных, связанных с обработкой данных zstd.

Как обнаружить атаку​


Для обнаружения попыток эксплуатации или последствий уязвимости рекомендуется:

  • Мониторинг логов Java-приложений на предмет аварийных завершений (crashes) и ошибок сегментации.
  • Анализ сетевых логов на предмет аномальных запросов, содержащих отрицательные значения или переполнения в полях, связанных с размером данных или смещениями.
  • Использование инструментов мониторинга целостности данных и аномального поведения процессов (EDR).

Так как уязвимость может приводить к утечке информации, важно также отслеживать аномальные исходящие соединения или доступ к чувствительным данным в памяти.

Как проверить свою версию​


Для проверки, установлена ли уязвимая версия пакета zstd-jni-java в вашей системе Ubuntu, выполните следующие команды:

  1. Проверьте версию ОС:

    Bash:
    cat /etc/os-release
  2. Проверьте версию ядра (для контекста):

    Bash:
    uname -r
  3. Проверьте установленную версию пакета zstd-jni-java:

    Bash:
    apt-cache policy zstd-jni-java

    Замените <имя-пакета> на zstd-jni-java.
  4. Проверьте статус безопасности системы:

    Bash:
    ubuntu-security-status

Если версия пакета ниже 1.5.7-14, система уязвима.

Исправление​


Для устранения уязвимости необходимо обновить пакет zstd-jni-java до версии 1.5.7-14 или выше.

  1. Обновите списки пакетов:

    Bash:
    sudo apt update
  2. Установите исправленную версию пакета:

    Bash:
    sudo apt install --only-upgrade zstd-jni-java
  3. Перезапустите приложения, использующие библиотеку, чтобы изменения вступили в силу.

После обновления убедитесь, что версия пакета соответствует 1.5.7-14 или выше.

Временные меры защиты​


Пока обновление не установлено, можно рассмотреть следующие временные меры:

  • Ограничьте доступ к сервисам, использующим zstd-jni, только доверенным источникам.
  • Включите строгую валидацию входных данных на уровне приложения, чтобы отклонять запросы с отрицательными смещениями или подозрительными значениями размера.
  • Используйте механизмы защиты от переполнения (например, ASLR, DEP) на уровне ОС и JVM, хотя они не устраняют саму уязвимость, но могут усложнить эксплуатацию.

Эти меры не заменяют обновление и должны рассматриваться как временное решение.

Как проверить устранение уязвимости​


Для проверки, что уязвимость устранена, выполните следующие шаги:

  1. Проверьте версию пакета:

    Bash:
    apt-cache policy zstd-jni-java

    Убедитесь, что версия не ниже 1.5.7-14.
  2. Проверьте статус безопасности:

    Bash:
    ubuntu-security-status

    Убедитесь, что CVE-2026-87823 не числится как уязвимость.
  3. Проведите функциональное тестирование приложений, использующих zstd-jni, чтобы убедиться, что они работают корректно после обновления.

Вывод​


CVE-2026-87823 представляет собой серьезную уязвимость в библиотеке zstd-jni, способную привести к отказу в обслуживании или утечке информации. Администраторам Ubuntu 24.04 и 26.04 рекомендуется как можно скорее обновить пакет zstd-jni-java до версии 1.5.7-14 или выше. До обновления следует ограничить доступ к уязвимым сервисам и включить строгую валидацию входных данных.

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


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

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


  • 13.09.2026 — Опубликована первая версия материала.
  • 14.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ