CVE-2026-90559: критическая запись за границами буфера в snappy-java до 1.1.10.8
В библиотеке snappy-java (xerial) до версии 1.1.10.8 включительно обнаружена уязвимость записи за границами буфера в методе Snappy.uncompress(ByteBuffer, ByteBuffer). Атакующий может подать корректные сжатые данные, которые после распаковки превышают ёмкость целевого буфера, что приводит к повреждению памяти и аварийному завершению JVM. Оценка критичности — 8.7 (HIGH).
Подробности
Уязвимость CVE-2026-90559 затрагивает продукт xerial snappy-java во всех версиях вплоть до 1.1.10.8 включительно. Проблема локализована в перегрузке метода Snappy.uncompress(ByteBuffer, ByteBuffer): при распаковке ёмкость целевого (destination) буфера никогда не проверяется на соответствие реальному размеру распакованных данных. Поскольку проверка отсутствует, злоумышленник может подготовить валидные сжатые данные, которые при распаковке дают результат, превышающий размер выделенного буфера назначения. Запись выходит за границы буфера, что ведёт к перезаписи соседней памяти и, как следствие, к аварийному завершению JVM. Это классическая уязвимость класса Out-of-Bounds Write (CWE-787), способная вызвать отказ в обслуживании. Уязвимости присвоена оценка CVSS 8.7 — HIGH. Столь высокий балл обусловлен низкой сложностью эксплуатации: достаточно подать приложению специально сформированные, но при этом валидные сжатые данные. Наиболее подвержены риску сервисы, принимающие сжатые полезные нагрузки из внешних источников: очереди сообщений, сетевые API, системы обмена данными, а также любые компоненты, распаковывающие пользовательский контент.Что делать
Основная рекомендация — обновить библиотеку snappy-java до версии, в которой уязвимость устранена (выше 1.1.10.8). Проверьте актуальную версию на странице проекта xerial snappy-java и в вашем менеджере зависимостей (Maven, Gradle), затем пересоберите и переразверните затронутые приложения. Если немедленное обновление невозможно, примените компенсирующие меры:- Не распаковывайте данные из недоверенных источников через Snappy.uncompress(ByteBuffer, ByteBuffer) — по возможности используйте API с корректной проверкой размеров.
- Выполняйте предварительную валидацию: до распаковки проверяйте заявленный размер результата и выделяйте буфер с запасом, соответствующим ожидаемому максимуму.
- Ограничьте размер входных сжатых данных на уровне приложения и сетевого периметра.
- Изолируйте обработку недоверенных данных: запускайте распаковку в отдельном процессе или песочнице, чтобы аварийное завершение JVM не затрагивало ключевые сервисы.
- Включите мониторинг аварийных завершений JVM и аномалий памяти как индикатор возможной эксплуатации.
Источник: CVE Project (cvelistV5)
