По чатам Telegram расходится анимированный стикер, при отрисовке которого приложение закрывается. Уязвимость воспроизводится на iOS, Android, macOS и Windows; веб-версия продолжает работать. Репорт об этой анимации лежал в поддержке Telegram с июля; чинить её начали в сентябре, когда файл стал массовым. Словом, Telegram нашёл своего краша среди стикеров.

Как устроен краш

Анимированный стикер в Telegram — это файл TGS: сжатый gzip JSON формата Lottie, где анимация описана векторными контурами по точкам. Клиенты растеризуют такие файлы нативным движком анимации — и именно он не переживает встречу с вредоносным файлом. В обсуждениях бага пишут, что дело в количестве точек: в анимацию упаковано аномально много вершин контуров, и на их разборе клиент падает. Веб-версия рисует Lottie другим движком — поэтому из всех официальных клиентов держится только она.

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

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

Хронология

Уязвимость известна с июля. Баг-хантер @w1r3l355 отправил в поддержку Telegram репорт о стикере, закрывающем все клиенты, кроме веб-версии, — публично файл он не раскрывал. Репорт проверяли на Android, iPhone, Mac и Windows: клиенты закрывались на всех четырёх платформах, а чат, куда закидывали стикер, переставал открываться у участников. Ответа на репорт и выплаты не последовало.

В начале сентября файл нашли повторно — и на этот раз не репортили, а стали рассылать по чатам. 8 сентября появился второй вектор: из стикера сделали кастомное эмодзи и поставили его в статус. Кастомные эмодзи — тот же Lottie, а статус отрисовывается рядом с именем в каждом чате, где человек пишет, — так краш перестал требовать даже отправки сообщения.

Исправление началось после того, как файл попал в массовую рассылку. Интернет тем временем подвёл счёт:

Пост в Telegram — @adele_toberg
Сломанный стикер vs РКН

Что делать до фикса

Все рабочие обходы сводятся к одному: не дать клиенту отрисовать анимацию.

  • Режим энергосбережения в настройках Telegram отключает автовоспроизведение анимированных стикеров и эмодзи — файл не разбирается, краш не происходит. Самый надёжный из обходов.
  • Если приложение закрывается сразу при запуске — откройте любое уведомление от Telegram: клиент стартует с конкретного чата, минуя падающий.
  • Долгое нажатие на иконку Telegram → «Избранное» или «Написать сообщение» — запуск в обход последнего открытого чата.
  • Веб-клиент работает: через него можно найти отправителя, удалить сообщение и пожаловаться.

Сводка обходов собрана пользователями.

И простое правило гигиены на ближайшие дни: не ставьте в статус и не устанавливайте паки из случайных рассылок и «проверь, работает ли у тебя» — до фикса любая незнакомая анимация может оказаться тем самым файлом. Проверенные паки — в каталогах эмодзи и стикеров.

Экономика репорта

Показательна не сама уязвимость, а путь, который она прошла. Июльский репорт с непубличным proof-of-concept пролежал без ответа полтора месяца; исправление началось после того, как файл попал в массовую рассылку. Для сравнения масштаба выплат: за баг с маскировкой внешней ссылки под внутреннюю — она раскрывает IP-адрес пользователя — Telegram заплатил 100 долларов. За анимацию, закрывающую все нативные клиенты, выплат на сегодня нет.