June 6

Как работала уязвимость Telegram

Всех приветствую! На связи админ канала Falcon Bytes! Я думаю, многие из вас видели посты на разных телеграм каналах про вирус в картинке который автоматически запускал любые программы если просто открыть чат с пользователем, который использовал эту уязвимость.

Сразу скажу, что эту уязвимость уже пофиксили. Но интересным будет провести анализ этой уязвимости.

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

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

Falcon Bytes

Однако почему Python-файл со специфическим расширением был воспринят Telegram как картинка (если точнее, как GIF-анимация), из-за чего автоматически загружался и исполнялся?

Дело в том, что Telegram, скорее всего, проверяет тип файла с помощью его Mime-type. Mime-type этого файла - image/gif:

Falcon Bytes

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

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

Falcon Bytes

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

Falcon Bytes

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

Falcon Bytes

Отдельно хочется сказать пару слов про источник 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. До новых встреч!