Эта статья была написана ещё вчера, но не была опубликована из этических соображений (раскрытие 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:

Это происходит из-за При загрузке этого файла через файл-пикер 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 файла, не внося изменения в сам файл. Также в этом источнике сказано, что проблема возникала с видео ( Будьте внимательны при открытии любых файлов, особенно от незнакомых вам людей. В идеале — вообще отключить автозагрузку файлов. Личный совет — используйте веб-версию Telegram (https://web.telegram.org) вместо десктопной. Уязвимости веб-версии приложения (например, XSS — и их уже находили, тык статья на Хабре) гораздо сложнее эксплуатировать из-за сложностей работы с MTProto из веба, плюсом вы защититесь от RCE на вашем устройстве, потому что браузер не предоставляет API для работы с системными командами. Также Telegram Desktop хранит ваши сессии как файлы в папке «tdata», что позволяет любому стилеру или пиратскому приложению на вашем компьютере использовать этот файл и угнать аккаунт Telegram (вы не получите даже уведомления). Если вы используете Telegram Desktop, обязательно обновитесь.


video/mp4). Возможно, данный эксплойт можно было также замаскировать под видео, но оригинальное воспроизведение уязвимости было именно с GIF-файлом. Причем из-за того, что так называемый GIF-файл на самом деле им не являлся (был невалидным), Telegram отображал его как черный прямоугольник, что хорошо видно на видео выше, которое было широко распространено в СМИ. Из-за этого утверждение BleepingComputer про то, что хакеры якобы могли сделать файл со встроенной миниатюрой тоже довольно сомнительно.Как защитить себя от подобных уязвимостей?
ссылка на оригинал статьи https://habr.com/ru/articles/807535/
Добавить комментарий