Разработчики Apache Thrift выпустили версию 0.24.0, закрывающую четыре уязвимости, которые затрагивают C++, Java, Python, Go, D, Ruby и C/GLib-биндинги. Проблемы связаны с некорректной обработкой сжатых данных, целочисленным переполнением при проверке лимитов чтения, а также чтением за пределами выделенной области памяти. Пользователям рекомендуется обновиться, чтобы предотвратить потенциальную дестабилизацию сервисов, использующих Thrift.
Детали уязвимостей
Первая уязвимость, CVE-2026-48586, получила название TZlibTransport Decompression Size Limit. Она проявляется в биндингах для C++, Java, Python, Go, D и C/GLib. Суть в неправильной обработке сильно сжатых данных, что ведёт к эффекту "усиления данных". Злоумышленник, отправив небольшой сжатый пакет, может спровоцировать чрезмерное расширение данных в памяти. При эксплуатации это способно вызвать отказ в обслуживании или, при определённых условиях, истощить ресурсы сервера. Проблема затрагивает все версии Apache Thrift до 0.24.0.
Вторая уязвимость, CVE-2026-49158, является вариантом "бомбы распаковки" (decompression bomb) в Ruby-биндингах. Она реализована в модуле THeaderTransport, использующем сжатие ZLIB. Отправитель может передать заведомо малый сжатый блок, который при декомпрессии полностью займёт доступную память процесса. Это также ведёт к исчерпанию ресурсов и потенциальному падению сервиса. Нашёл проблему исследователь, скрывающийся под псевдонимом LTSHFWJT.
Третья уязвимость, CVE-2026-55969, связана с целочисленным переполнением в методе TProtocol::checkReadBytesAvailable(). Она затрагивает C++ и c_glib-биндинги. Ошибка возникает при подсчёте количества байт, доступных для чтения. Из-за переполнения злоумышленник может обойти механизмы ограничения размера сообщения и инициировать чтение произвольного объёма данных, что в итоге приводит к переполнению буфера или отказу в обслуживании. Обнаружили уязвимость исследователи Ghaith Abdulreda и Javid Khan.
Четвёртая уязвимость, CVE-2026-58023, представляет собой запись за границами выделенного буфера в куче (heap out-of-bounds read) в c_glib-биндингах. Она проявляется в коде обработки остаточных байт транспортного протокола. При определённых условиях неправильно вычисляется длина оставшейся части сообщения, что позволяет читать память за пределами допустимой области. Это может привести к раскрытию конфиденциальных данных в памяти процесса, таких как ключи шифрования или пользовательская информация.
Apache Thrift - популярный фреймворк для создания распределённых приложений, активно используемый в микросервисной архитектуре, big data и телекоммуникациях. Он поддерживает множество языков программирования, что обеспечивает совместимость между гетерогенными системами. Уязвимости в его биндингах потенциально затрагивают тысячи приложений по всему миру, включая решения на базе Hadoop, Cassandra, Finagle и других. Проблемы с обработкой сжатых данных и памятью особенно опасны в средах с высоким уровнем автоматизации, где злоумышленник может атаковать узел сети без прямого доступа к нему, отправляя специально сформированные запросы.
Разработчики выпустили исправление в версии 0.24.0. В каждом из бюллетеней рекомендуется обновить все используемые биндинги до указанной версии. Временные меры защиты включают отключение сжатия ZLIB на транспортном уровне (если это допустимо архитектурой) и строгое ограничение размера сообщений на уровне межсетевого экрана или прокси. Однако единственным надёжным решением остаётся установка патча.
Уязвимости такого рода привлекают внимание к особенностям реализации протоколов сжатия в удалённых вызовах процедур. В последние годы аналогичные проблемы обнаруживались в gRPC, ZeroMQ и других фреймворках. Они подчёркивают необходимость тщательной проверки размеров входных данных и использования безопасных обёрток для библиотек сжатия, таких как ZLIB. Разработчики Apache Thrift уже включили соответствующие проверки в новый релиз, что должно снизить риск эксплуатации подобных атак в будущем.
Ссылки
- https://lists.apache.org/thread/z2myopbovxngfvchdz8hddots9p5ffbt
- https://lists.apache.org/thread/xmkgd107k795hyrg5kf97mny30sgl5bo
- https://lists.apache.org/thread/fmjl8l415tj9zwlob8v2dr5hq1d0hts7
- https://lists.apache.org/thread/p008svsjf9p6bj47wyyf5dgglq5z7xoq