Ad
Инциденты

Один стикер может отправить Telegram в цикл сбоев

Маша Даровская
By Маша Даровская , IT-редактор и автор
Один стикер может отправить Telegram в цикл сбоев
Обложка © Anonhaven

В Telegram обнаружили ошибку обработки анимированных стикеров, из-за которой специально подготовленный файл может аварийно завершать работу клиента. В распространяемом образце размером 269 байт используется аномальное значение числа точек векторной звезды — порядка 10³⁸. При попытке обработать такую геометрию рендерер получает заведомо некорректную нагрузку и приложение может закрыться. Подтверждений кражи переписки, захвата аккаунта или выполнения произвольного кода нет: известный сценарий сводится к отказу в обслуживании.

Сам факт сбоя из-за стикера подтвердили разработчики Telegram. В официальном баг-трекере есть отчет для Telegram iOS 12.9.3 на iPhone 16 Pro: приложение стабильно завершалось при открытии списка чатов и отправке сообщений. Стек вызовов проходил через rlottie::Animation::renderSync, LOTPolystarItem::updatePath и VPath::VPathData::addPolystar, после чего процесс завершался с SIGABRT. Представитель Telegram указал, что причиной стал стикер, и сообщил о готовящемся исправлении.

Анимированные стикеры Telegram используют формат TGS. Это векторная анимация Lottie, которую клиент строит непосредственно на устройстве пользователя. Telegram устанавливает для импортируемых TGS-файлов ограничение в 64 КБ, размер кадра 512×512 пикселей, частоту 30–60 кадров в секунду и продолжительность до трех секунд.

Размер файла поэтому почти ничего не говорит о стоимости его отрисовки. В нем хранится описание фигур и их параметров, а не готовая последовательность растровых кадров.

В образце, который сейчас обсуждается в профильных сообществах, описана звезда с числом точек порядка 10³⁸. Такой файл может занимать несколько сотен байт: огромное число записывается несколькими символами, а тяжелая работа начинается позже, когда клиент разбирает параметры и пытается построить фигуру. SecurityLab приводит размер конкретного образца — 269 байт.

Описывать механизм как гарантированное «мгновенное заполнение всей оперативной памяти» некорректно. Официальный журнал сбоя iOS показывает исключение внутри rlottie при обработке многоугольной звезды и последующий SIGABRT. Чрезмерное потребление памяти или процессорного времени для такого объекта ожидаемо, однако опубликованных данных недостаточно, чтобы для всех платформ свести причину к одному сценарию OOM — Out of Memory, то есть исчерпанию оперативной памяти.

Опасность ошибки связана с автоматической отрисовкой сообщения. Пользователю необязательно нажимать на сам стикер: клиент может попытаться обработать его при открытии разговора или при построении элементов интерфейса.

Foresiet изучила публичную демонстрацию, появившуюся 6 сентября. Скрипт отправлял специально подготовленный стикер в тестовый чат. Авторы первоначального сообщения утверждали, что проблемный разговор вызывал сбои в официальных клиентах на нескольких платформах. Наиболее надежно сейчас подтвержден вариант для iOS: Telegram напрямую связал зарегистрированный сбой со стикером.

Ошибка может оказаться особенно неприятной, если проблемный объект остается в истории. После повторного запуска приложение снова пытается построить список чатов или открыть тот же разговор и снова доходит до поврежденной анимации.

В официальном отчете пользователь вообще не мог нормально открыть основной список диалогов. При этом Settings и Contacts работали, отдельные разговоры удавалось открыть через поиск или контакты, а Telegram Web для этого аккаунта оставался доступен.

Из опубликованных материалов следует, что речь идет об атаке на доступность приложения. Отправитель добивается обработки некорректной Lottie-анимации. Клиент не справляется с аномальным параметром и завершается. Доступ к аккаунту жертвы, ключам авторизации, облачной переписке или файлам при этом не продемонстрирован.

Такой класс атак называют DoS — Denial of Service, или отказом в обслуживании. В данном случае целью становится клиент Telegram или конкретный разговор, который пользователь не может нормально открыть из-за сохраненного сообщения.

CVE для этой ошибки на момент публикации не опубликован. Нет и данных о том, что проблема позволяет перейти от сбоя рендерера к удаленному выполнению кода.

В Telegram Desktop 7.2.7, выпущенном 7 сентября, разработчики указали в журнале изменений исправление сбоев при обработке некорректных Lottie-файлов.

Стикеры уже становились причиной атак на доступность Telegram. В 2022 году в репозитории Telegram Desktop описывали набор анимированных стикеров с аномально большим разрешением. Один кадр такого объекта мог потребовать сотни мегабайт памяти после распаковки. На слабых устройствах несколько стикеров приводили к зависанию клиента или всей системы. Автор отчета воспроизводил проблему на Desktop и Android, а также сообщал о ней для веб-клиента.

Нынешний случай устроен иначе. Здесь проблема связана с параметрами векторной фигуры внутри Lottie и обработкой polystar — многоугольника или звезды. Общий принцип остается прежним: очень маленький передаваемый объект способен заставить устройство выполнить несоизмеримо дорогую операцию во время отображения.

Вопросы и ответы

Правда ли, что файл весит всего 269 байт?

Такой размер указан для распространяемого образца. TGS хранит описание векторной анимации, поэтому маленький файл способен содержать параметры, которые требуют несоизмеримо больших ресурсов при обработке.

Там действительно звезда с 10³⁸ точек?

Такое значение приводится в разборе конкретного образца. Официальный журнал Telegram дополнительно подтверждает, что сбой происходит в коде обработки LOTPolystarItem, то есть многоугольной звезды.

Telegram падает именно из-за нехватки памяти?

Так утверждать для всех платформ нельзя. В iOS зарегистрирован SIGABRT после исключения внутри rlottie. Избыточное потребление ресурсов может быть частью механизма, но опубликованные журналы не подтверждают единый сценарий OOM для всех клиентов.

Нужно открыть сам стикер?

Отдельно нажимать на него не требуется. Проблема возникает, когда Telegram пытается отрисовать объект в интерфейсе.

Может ли стикер украсть аккаунт или переписку?

Таких возможностей не показано. Известный эффект — аварийное завершение приложения и возможный повторный сбой при возвращении к проблемному сообщению.

Все версии Telegram уязвимы?

Нет подтвержденного списка всех затронутых версий. Для iOS ошибка воспроизводилась на Telegram 12.9.3, а исправление отмечено как готовящееся. Telegram Desktop уже получил часть исправлений для некорректных Lottie, однако в его репозитории остаются открытые работы, связанные с DoS-проверками библиотеки tlottie.

Поможет ли отключение автозагрузки медиа?

Гарантии нет. Настройка автозагрузки фото и видео сама по себе не предотвращает обработку стикеров.

Что делать, если Telegram уже постоянно вылетает?

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

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.