Today

exteraGram может украсть сессии? Разбираем статью про RCE

Захотелось рассмотреть статью знакомого, которую он написал на Хабре. Автор разобрал клиент, его плагины, внутренности, деобфусцировал Java-код и нативный слой, а потом пришел к выводу, что с безопасностью тут полная труба

Мне стало интересно, почему это происходит. Так что самое время сделать кратку выжимку и разобраться, насколько все плохо на самом деле

Для желающих прочитать оригинал или узнать больше технических моментов - очень советую прочитать статью с Хабра

Первым делом рассмотрим систему загрузки плагинов и тот самый RCE.

В exteraGram зашит механизм динамического обновления и работы с плагинами -PythonPluginsEngine. Сам по себе функционал плагинов - штука удобная. Но то, как это реализовано под капотом, мягко говоря, пугает

Схема работы выглядит так:

Telegram-канал со скриптами
      ↓
Скачивание кода / .so / Python прямо из Telegram
      ↓
Проверка подписи (ЭЦП)? НЕТ
      ↓
Запуск прямо в процессе Telegram (с его UID)

Клиент качает исполняемые модули прямо из постов Telegram-канала и выполняет их в едином адресном пространстве приложения. При этом в цепочке загрузки вообще нет проверки цифровой подписи (ЭЦП). Вдобавок прописаны флаги вроде can_not_skip, чтобы обойти окно установки

Что это значит на практике? Если кто-то угнать Telegram-канал разработчиков или подменит файл, он получает возможность скрытно запустить свой код на вашем телефоне. И у него будут ровно те же права, что и у самого Telegram

И вот это - самый настоящий Remote Code Execution (RCE), без всяких оговорок.

Теперь заглянем в «Безопасный режим» (Safe Mode)

В официальном патчноуте версии 12.9.0 авторы гордо заявили, что добавили безопасный режим для работы с плагинами

Открываем декомпилятор, находим PythonPluginsEngine.java и ищем реализацию. И что мы там видим? Ровно одну строчку:

Java

if (safeMode) {
    return;
}

Все. Это не изоляция, не песочница на уровне ОС и не ограничение прав через SecurityManager. Это банальный тумблер: либо загрузка выключена полностью, либо, если она включена, код выполняется с полным доступом ко всему процессу

Разберем «запредельную» защиту: LSParanoid, OLLVM и забытый strip.

В чатах авторы очень любили рассказывать про свои крутые защиты. И накручено там реально немало:

  1. Python-модули плагинов скомпилированы через Cython в нативные библиотеки .so.
  2. Библиотеки прогнаны через кастомный OLLVM с запутыванием потока управления (Control Flow Flattening).
  3. Весь Java-код наглухо зашифрован обфускатором LSParanoid (математика на базе SplitMix64, битовые сдвиги rotl на 9, 10, 13 и XOR-ы с массивами).

Казалось бы, глухая оборона. Но разработчики совершили детскую ошибку: они забыли сделать strip для нативных .so библиотек

Утилита strip вычищает отладочную информацию. Забыв ее выполнить, авторы подарили реверсерам все внутренние пути сборки SDK, точную версию Cython и имена функций прямо на блюдечке. Вся сложная OLLVM-обфускация обнулилась одной незапущенной командой. А для Java-части с LSParanoid автор исследования просто написал декриптор на Python, который за секунды расшифровал все строки

Что вредоносный код сможет спереть?

Вредоносной либе вообще не нужно ломать Android или получать root. Ей уже дали место прямо внутри процесса Telegram, с его UID и правами

Что получает атакующий при запуске своего кода:

  • Данные авторизации: Прямой доступ к auth_key, сессиям и токенам.
  • Переписку и файлы: Доступ к локальным базам со всеми чатами, медиа и кэшем.
  • Telegram API: Возможность от вашего лица отправлять сообщения, читать диалоги и совершать любые действия в сети.
  • Ресурсы устройства: Камеру и микрофон, если разрешения для Telegram уже были выданы.

В каком случае сессиям реально настанет пизда и каковы шансы?

Файлы качаются напрямую с серверов Telegram по зашифрованному протоколу MTProto, поэтому перехватить трафик (классический MitM) тут физически невозможно

Когда аккаунтам реально пизда:

  1. Угнали Telegram-канал разработчиков. Кто-то ломает аккаунт админа канала, откуда клиент качает плагины, и редактирует пост, заливая туда зловредный .so или Python-модуль.
  2. Злой умысел или инсайдер. Владелец канала сам выкладывает модуль со стилером.

Поскольку никакой проверки ЭЦП нет, exteraGram молча схавает поддельный файл, завантажит его в память и отдаст ключи от вашего аккаунта

Каковы шансы такого исхода?

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

Итоги

Исследование - вообще не пустой хайп. В клиент зашит механизм, который качает неподписанный код прямо из Telegram-канала и исполняет его с максимальными привилегиями приложения. Пока разработчики не добавят нормальную проверку цифровой подписи (ЭЦП) и реальную изоляцию плагинов, пользоваться таким клиентом равносильно доверию обезьяне с гранатой.

Моя личная рекомендация

На фоне данной ситуации очень хочу посоветовать отказаться от исползования плагинов как таковых (в целом их удалить), либо же вовсе отказаться от использования exteraGram/AyuGram. Учитывая ситуацию и то, как разработчик exteraGram относится к своему же продукту (его отношение к своему же продукту можете прочитать в оригинальной статье) - отказ от данного клиента будет лучшим вариантом