Как работала уязвимость Telegram
Всех приветствую! На связи админ канала Falcon Bytes! Я думаю, многие из вас видели посты на разных телеграм каналах про вирус в картинке который автоматически запускал любые программы если просто открыть чат с пользователем, который использовал эту уязвимость.
Сразу скажу, что эту уязвимость уже пофиксили. Но интересным будет провести анализ этой уязвимости.
Чем была вызвана уязвимость
Уязвимость вызвана опечаткой в списке расширений исполняемых файлов, захардкоженном в коде 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 про то, что хакеры якобы могли сделать файл со встроенной миниатюрой тоже довольно сомнительно.
На связи был админ канала Falcon Bytes. До новых встреч!