Pull to refresh

Client-side RCE в Telegram Desktop. Разбор с POC

Reading time3 min
Views12K

Эта статья была написана ещё вчера, но не была опубликована из этических соображений (раскрытие 1-day уязвимости). Однако буквально пару минут назад была опубликована новость от редактора Хабра, а в источнике, на который он ссылается, был приведен POC, поэтому я больше не вижу смысла ждать и решил опубликовать статью сейчас.

Недавно некоторые СМИ писали о "новой уязвимости" в приложении Telegram Desktop для Windows, которая позволяет злоумышленнику исполнять произвольный код при открытии чата с ним, если у вас включена автозагрузка файлов (она включена по умолчанию).

Была ли действительно эта уязвимость?

Да. Предоставляю видеозапись POC этой уязвимости, а ниже я разберу, из чего состоит вредоносный файл и почему при его автозагрузке исполнялся произвольный код.

Дисклеймер

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

Как видно, при открытии чата загружается изображение, а сразу же после этого выполняется код (в данном случае - открывается калькулятор).

Чем была вызвана уязвимость

Уязвимость вызвана опечаткой в списке расширений исполняемых файлов, захардкоженном в коде Telegram Desktop. Так, вместо pyzw (файл типа Python Zip Application) в строке с запрещенными расширениями было pywz. Эта ошибка была исправлена в этом PR: https://github.com/telegramdesktop/tdesktop/pull/27737

Коммит с исправлением проблемы
Коммит с исправлением проблемы

Однако почему Python-файл со специфическим расширением был воспринят Telegram как картинка (если точнее, как GIF-анимация), из-за чего автоматически загружался и исполнялся? Дело в том, что Telegram, скорее всего, проверяет тип файла с помощью его Mime-type. Mime-type этого файла - image/gif:

Это происходит из-за magic number файла - GIF89A.

Переходим к самому интересному - к тому, как же выглядел этот файл.

При загрузке этого файла через файл-пикер Telegram Desktop он определяется как картинка.

А вот так выглядит после отправки.

Отдельно хочется сказать пару слов про источник BleepingComputer.

В нем указывается, что "хакеры использовали бота, чтобы изменить mime-type файла под видео" (в оригинале To masquerade the file, researchers devised using a Telegram bot to send the file with a mime type of 'video/mp4,' causing Telegram to display the file as a shared video). Это, конечно, неправда.

Mime-type файла определяется по специальному паттерну в самом файле или в крайнем случае по его расширению. Никакой Telegram-бот не может изменить mime-type файла, не внося изменения в сам файл. Также в этом источнике сказано, что проблема возникала с видео (video/mp4). Возможно, данный эксплойт можно было также замаскировать под видео, но оригинальное воспроизведение уязвимости было именно с GIF-файлом. Причем из-за того, что так называемый GIF-файл на самом деле им не являлся (был невалидным), Telegram отображал его как черный прямоугольник, что хорошо видно на видео выше, которое было широко распространено в СМИ. Из-за этого утверждение BleepingComputer про то, что хакеры якобы могли сделать файл со встроенной миниатюрой тоже довольно сомнительно.

Как защитить себя от подобных уязвимостей?

Будьте внимательны при открытии любых файлов, особенно от незнакомых вам людей. В идеале - вообще отключить автозагрузку файлов.

Личный совет - используйте веб-версию Telegram (https://web.telegram.org) вместо десктопной. Уязвимости веб-версии приложения (например, XSS - и их уже находили, тык статья на Хабре) гораздо сложнее эксплуатировать из-за сложностей работы с MTProto из веба, плюсом вы защититесь от RCE на вашем устройстве, потому что браузер не предоставляет API для работы с системными командами.

Также Telegram Desktop хранит ваши сессии как файлы в папке "tdata", что позволяет любому стилеру или пиратскому приложению на вашем компьютере использовать этот файл и угнать аккаунт Telegram (вы не получите даже уведомления).

Если вы используете Telegram Desktop, обязательно обновитесь.

Tags:
Hubs:
+33
Comments43

Articles