Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Telegram ломается от картинки меньше одного килобайта

Для сбоя Telegram не понадобились ни большой файл, ни сложная цепочка действий. В чатах начал распространяться стикер размером всего 269 байт, способный заставить приложение аварийно завершить работу уже при попытке показать сообщение. У части пользователей Telegram закрывается при открытии проблемного диалога, а в некоторых случаях сбой повторяется после нового запуска клиента.

Причина скрывается внутри анимированного изображения. Анимированные стикеры Telegram используют формат TGS, построенный на Lottie JSON. Формат описывает векторную графику и параметры анимации, а клиент превращает такое описание в изображение непосредственно на устройстве. В проблемном файле для небольшой звезды задано значение порядка 1038 точек. При обработке аномального параметра рендерер пытается построить фигуру с практически невозможным количеством элементов, резко увеличивает нагрузку на ресурсы и в итоге завершает работу приложения.

Нажимать на стикер при этом необязательно. Согласно публичному разбору инцидента, сбой может возникнуть уже при открытии чата, где находится специально подготовленная анимация. Сообщение сохраняется в истории, поэтому повторное открытие проблемного диалога способно снова запустить обработку файла. Признаков кражи переписки, ключей или доступа к аккаунту исследователи не обнаружили. По характеру воздействия проблема ближе к локальной DoS-атаке, при которой специально сформированные данные делают приложение или отдельный чат временно недоступными.

Масштаб проблемы зависит от используемого клиента и версии Telegram. Разработчики Telegram Desktop уже выпустили версию 7.2.7, где прямо указали исправление сбоев при обработке некорректных Lottie-файлов. Пользователям настольного клиента достаточно установить актуальное обновление. Для iOS в начале недели сообщалось о подготовленном исправлении, которое ещё ожидало распространения в стабильной сборке.

Разработчики продолжают усиливать проверку анимаций. В репозитории Telegram Desktop появился отдельный запрос на перенос дополнительных защитных проверок из библиотеки tlottie; автор запроса прямо упоминает DoS-ошибки при обработке недоверенных Lottie-файлов. Сама библиотека написана на Rust и проектировалась с расчётом на обработку Lottie JSON как потенциально недоверенного входного содержимого.

Похожий класс ошибок уже создавал проблемы Telegram несколько лет назад. В 2022 году пользователи описали сбой, при котором специально подготовленные анимированные стикеры огромного разрешения заставляли клиенты расходовать сотни мегабайт памяти на отрисовку одного кадра. Современный случай использует другой параметр, но причина остаётся похожей: компактный файл способен потребовать несоизмеримо больше ресурсов после распаковки и обработки графическим движком.

До установки исправлений лучше не открывать повторно диалог, после которого Telegram начал аварийно закрываться. Если доступ к чату сохраняется через обновлённую или невосприимчивую версию клиента, проблемное сообщение можно удалить из истории. Для Telegram Desktop главным способом защиты остаётся обновление до версии 7.2.7 или новее.

SecurityLab