Уязвимость DoS в t-digest 3.1–3.3: невалидированные поля длины в MergingDigest.fromBytes (CVE-2026-87962)
В библиотеке t-digest версий 3.1–3.3 обнаружена уязвимость отказа в обслуживании (DoS) с оценкой CVSS 8.7 (HIGH). Метод MergingDigest.fromBytes не проверяет поля длины и ёмкости десериализуемых данных, что позволяет атакующему обрушить поток парсинга через специально сформированный сериализованный дайджест. Уязвимы приложения, принимающие t-digest-данные из недоверенных источников.
Подробности
Уязвимость CVE-2026-87962 относится к продукту tdunning t-digest и присутствует в версиях 3.1, 3.2 и 3.3. Оценка критичности по шкале CVSS составляет 8.7 (HIGH). Причина уязвимости — отсутствие валидации полей длины и ёмкости в методе MergingDigest.fromBytes. Этот метод восстанавливает объект MergingDigest из сериализованного представления, однако не проверяет согласованность значений заголовка сериализованных данных. Если атакующий передаёт специально сформированный дайджест с несоответствующими друг другу полями заголовка, парсер наталкивается на некорректные значения размеров массивов. Результатом обработки такого вредоносного ввода становится одно из двух необработанных исключений времени выполнения: ArrayIndexOutOfBoundsException либо NegativeArraySizeException. Оба исключения аварийно завершают поток, выполняющий парсинг, что и приводит к отказу в обслуживании — например, к падению воркер-потока, обрыву обработки очереди сообщений или недоступности сервиса, принимающего t-digest-данные. Существенно, что эксплуатация не требует аутентификации или сложной подготовки: достаточно, чтобы приложение десериализовало t-digest из недоверенного источника — по сети, из очереди сообщений, из пользовательского файла или через API.Что делать
Основная рекомендация — обновить t-digest до версии, в которой устранена проблема, и не использовать диапазон 3.1–3.3 в приложениях, работающих с внешними данными. Перед обновлением следует свериться с официальным репозиторием проекта и проверить актуальный номер исправленной версии, поскольку в записи CVE конкретная патч-версия не указана. Если немедленное обновление невозможно, применимы следующие митигации: - Не десериализовать t-digest из недоверенных или непроверенных источников; по возможности передавать агрегированные значения в других форматах. - Обернуть вызовы MergingDigest.fromBytes в обработку исключений (перехват RuntimeException, включая ArrayIndexOutOfBoundsException и NegativeArraySizeException), чтобы авария парсера не приводила к остановке всего сервиса. - Ограничить размер принимаемых сериализованных дайджестов и валидировать входные данные на уровне приложения до передачи в библиотеку. - Изолировать обработку недоверенных t-digest-данных в отдельные процессы или потоки с контролем их жизненного цикла.Итог
CVE-2026-87962 — высококритичная уязвимость отказа в обслуживании в t-digest 3.1–3.3, возникающая из-за отсутствия валидации полей длины в MergingDigest.fromBytes. Приоритет исправления высокий для всех сервисов, которые десериализуют t-digest из внешних источников. Оптимальное решение — обновление библиотеки; до его внедрения следует ограничить доверие к входным данным и защитить поток парсинга от аварийного завершения.Источник: CVE Project (cvelistV5)
