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.
- Атакующий формирует входные данные, содержащие отрицательное смещение (offset) или значение, вызывающее переполнение 32-битного целого.
- Java-код передает это значение в нативный метод через
direct-ByteBuffer.
- Нативный код выполняет проверку границ, используя 32-битную знаковую арифметику. Из-за переполнения или отрицательного значения проверка не блокирует доступ.
- Происходит чтение памяти за пределами буфера (Out-of-Bounds Read).
Последствия зависят от того, какая память была прочитана:
- Если адрес некартирован, JVM может завершиться аварийно (Segmentation Fault).
- Если адрес соответствует другим данным в памяти JVM, атакующий может извлечь информацию (например, размер фрейма или другие данные), что представляет риск утечки информации.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо:
- Наличие Java-приложения, использующего уязвимую версию библиотеки
zstd-jni(до 1.5.7-14).
- Возможность передать контролируемые данные в методы, обрабатывающие
direct-ByteBufferдля определения размера фрейма.
- Отсутствие дополнительных механизмов защиты, которые бы валидировали смещения на уровне Java-кода перед вызовом нативных методов.
Возможный сценарий атаки
Типичный сценарий атаки предполагает, что злоумышленник взаимодействует с сервисом, сжимающим или разжимающим данные с помощью zstd-jni.
- Атакующий отправляет специально сформированный запрос, содержащий вредоносные значения смещений в заголовке или метаданных данных.
- Сервисный процесс (JVM) принимает данные и вызывает методы zstd-jni для обработки.
- Из-за ошибки в проверке границ нативный код читает память за пределами буфера.
- В худшем случае процесс JVM аварийно завершается, что приводит к отказу в обслуживании (DoS).
- В случае успешного чтения валидной памяти атакующий может получить доступ к конфиденциальным данным, находящимся в памяти процесса.
Есть ли публичный эксплойт
Публичный эксплойт или PoC (Proof of Concept) для CVE-2026-87823 не подтвержден в доступных официальных источниках на момент подготовки статьи.
Однако наличие подробного технического описания ошибки и ссылки на исправляющие коммиты в репозитории GitHub позволяет предположить, что эксплойт может быть разработан относительно легко. Отсутствие публичного PoC не означает, что уязвимость не может быть эксплуатирована.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы.
Общие признаки, которые могут указывать на попытку эксплуатации (неспецифичные):
- Аварийные завершения Java-процессов (JVM crashes) с ошибками сегментации (Segmentation Fault) в логах.
- Необъяснимые сбои в сервисах, использующих сжатие/разжатие данных.
- Аномальные запросы с необычными значениями в заголовках или метаданных, связанных с обработкой данных zstd.
Как обнаружить атаку
Для обнаружения попыток эксплуатации или последствий уязвимости рекомендуется:
- Мониторинг логов Java-приложений на предмет аварийных завершений (crashes) и ошибок сегментации.
- Анализ сетевых логов на предмет аномальных запросов, содержащих отрицательные значения или переполнения в полях, связанных с размером данных или смещениями.
- Использование инструментов мониторинга целостности данных и аномального поведения процессов (EDR).
Так как уязвимость может приводить к утечке информации, важно также отслеживать аномальные исходящие соединения или доступ к чувствительным данным в памяти.
Как проверить свою версию
Для проверки, установлена ли уязвимая версия пакета
zstd-jni-java в вашей системе Ubuntu, выполните следующие команды:- Проверьте версию ОС:
Bash:cat /etc/os-release - Проверьте версию ядра (для контекста):
Bash:uname -r - Проверьте установленную версию пакета
zstd-jni-java:
Bash:apt-cache policy zstd-jni-java
Замените<имя-пакета>наzstd-jni-java.
- Проверьте статус безопасности системы:
Bash:ubuntu-security-status
Если версия пакета ниже 1.5.7-14, система уязвима.
Исправление
Для устранения уязвимости необходимо обновить пакет
zstd-jni-java до версии 1.5.7-14 или выше.- Обновите списки пакетов:
Bash:sudo apt update - Установите исправленную версию пакета:
Bash:sudo apt install --only-upgrade zstd-jni-java - Перезапустите приложения, использующие библиотеку, чтобы изменения вступили в силу.
После обновления убедитесь, что версия пакета соответствует 1.5.7-14 или выше.
Временные меры защиты
Пока обновление не установлено, можно рассмотреть следующие временные меры:
- Ограничьте доступ к сервисам, использующим zstd-jni, только доверенным источникам.
- Включите строгую валидацию входных данных на уровне приложения, чтобы отклонять запросы с отрицательными смещениями или подозрительными значениями размера.
- Используйте механизмы защиты от переполнения (например, ASLR, DEP) на уровне ОС и JVM, хотя они не устраняют саму уязвимость, но могут усложнить эксплуатацию.
Эти меры не заменяют обновление и должны рассматриваться как временное решение.
Как проверить устранение уязвимости
Для проверки, что уязвимость устранена, выполните следующие шаги:
- Проверьте версию пакета:
Bash:apt-cache policy zstd-jni-java
Убедитесь, что версия не ниже 1.5.7-14.
- Проверьте статус безопасности:
Bash:ubuntu-security-status
Убедитесь, что CVE-2026-87823 не числится как уязвимость.
- Проведите функциональное тестирование приложений, использующих zstd-jni, чтобы убедиться, что они работают корректно после обновления.
Вывод
CVE-2026-87823 представляет собой серьезную уязвимость в библиотеке zstd-jni, способную привести к отказу в обслуживании или утечке информации. Администраторам Ubuntu 24.04 и 26.04 рекомендуется как можно скорее обновить пакет
zstd-jni-java до версии 1.5.7-14 или выше. До обновления следует ограничить доступ к уязвимым сервисам и включить строгую валидацию входных данных.Официальные источники
История обновлений статьи
- 13.09.2026 — Опубликована первая версия материала.
- 14.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
