Pull to refresh

Comments 43

Все еще непонятно. Из-за первых байт файла телеграм считет его картинкой и скачивает. Потом пытается отобразить? В какой момент выполняется питоновый скрипт? Нужно ли для этого отдельно устанавливать питон и чтобы он был ассоциированс pyzw файлами?

Скрипт выполняется при проигрывании гифки. Да, для того чтобы скрипт был выполнен и pyzw-файлы ассоциировались с Python, он должен быть установлен. Несмотря на заверения Telegram, что Python установлен о 0.01% пользователей Telegram Desktop, 0.01% от 800 миллионов это все еще большое количество пользователей. Предполагаю, что у большинства пользователей Хабра Python установлен, поэтому мы как раз "целевая аудитория" тех, кто может эксплуатировать этот баг.

UFO just landed and posted this here

Но всё ещё не очень понятно как и зачем телеграмм вообще открывает подобные файлы, ещё и блэк лист расширений, какой-то бред

Если файл является медиафайлом, то телеграм автоматически пытается сделать его превьюшку или даже начать его воспроизводить (пример). При этом, похоже, используются системные возможности (возможно, если клиент не может сделать превьюшку сам?).

Скрипт на Python определяется клиентом как медиафайл из-за первой строчки. Дальше расширение файла проверяется по захардкоженному списку исполняемых файлов ("тихое" открытие которых по умолчанию запрещено и попытка открыть файл (даже руками по двойному клику) выдаёт окно "это исполняемый файл, открываем?") и файл передаётся в ОС на открытие.

Без обхода чёрного списка расширений исполняемых файлов этот эксплоит срабатывал бы ещё у меньшего числа пользователей - лишь у тех, кто ранее пытался открыть исполняемые файлы и поставил галочку "не спрашивать больше". Но, благодаря тому, что в чёрном списке была опечатка, удалось найти такое расширение, которое не воспринимается как исполняемый файл, являясь им.

Дальше всё складывается: скрипт на питоне воспринимается как медиафайл, клиент не может сделать превью и, поскольку не воспринимает файл как исполняемый, передаёт его на исполнение операционной системе без вопросов.

Сейчас проверил - у меня windows + python, но это расширение не связано с ним. Ставил Python из Microsoft Store, может быть, поэтому.

На видео, кстати, выполняется клик по файлу. Если включено автовоспроизведение gif, но по файлу не кликать, калькулятор запустится?

заверения Telegram, что Python установлен о 0.01% пользователей

Telegram

Возникает вопросик откуда у них эта информация? Зачем они собирают информацию об установленных приложения?

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

В методе sendvideo можно добавить thumbnail, вероятно можно обойти и mime-type video/mp4 схожим с gif методом.
https://core.telegram.org/bots/api#sendvideo

Интересное предположение, кстати. Но я сомневаюсь, что BC имели в виду это. Если посмотреть на их POC, то он даже близко не похож на настоящий эксплойт - там даже нет magic number. В любом случае, к качеству их новости большие вопросы.

любому стилеру или пиратскому приложению на вашем компьютере использовать этот файл и угнать аккаунт Telegram

Двухфакторная авторизация же защищает?

Нет, ведь можно угнать сессионные идентификаторы вместе с ключами - для серверов Telegram это будет выглядеть, как если бы пользователь просто сменил свой IP, что вполне может произойти при переключении между мобильной сетью и wi-fi.

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

Но у телеграма есть некоторая защита в том, что если одна сессия используется одновременно с двух разных ip, то телеграм её мгновенно банит и нужно будет проходить флоу авторизации по новой, а это уже будет очень заметно для пользователя. Поэтому украв сессию, нужно её сначала удалить с компьютера пользователя и тем самым разлогинить его оттуда =)

Единственный вариант защититься — при каждой попытке логина (даже своими руками) проверять список активных сессий в настройках приложения на наличие дублей и всякой подозрительной активности.

Шта? Последний абзац противоречит предыдущему. Да и не было такой защиты, по крайней мере раньше, потому что это любые переключения срубит.

Банит только если сессия одновременно используется с двух разных IP. При переключении IP меняется и со старого запросы естественным образом перестают ходить.

С веб-версией есть фича-баг: в десктопном\мобильном клиенте отправляете самому себе ссылку web.telegram.org, переходите по ней, клиент добавляет к ссылке токен, и по этому токену веб-версия создаёт новую сессию без запроса второго фактора. Но при этом в мобильный клиент прилетает уведомление о новой сессии, поэтому совсем незаметно сделать не получится, если нет доступа к устройству

Двухфакторка – нет. Локальный пароль (пасскод) – да

Блеклист вместо вайтлиста для исполнения файлов это конечно капец какое смелое решение; но что интересно, в оригинальном видео консоль открывается ещё до наведения мышки (и теоретически клика) на загруженный файл. То есть это либо другой баг, либо видео фейк

Телеграм гифки вроде как автоматически воспроизводит, может в этом все дело.

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

Что интересно, в клиенте последней версии (4.16.6) баг воспроизводится. Но работает только для того, кто отправил файл, требует клика по файлу, ну и естественно установленного питона. Для остальных файл загружается с расширением .untrusted, и соответственно код не исполняется.

.untrusted - это временный серверсайдный костыль, до недавнего времени его не было.

Ага, в качестве решения собираются перейти от чёрных списков к белым, чтобы без предупреждения запускались только фото/видео/аудио файлы.

В оригинале никак не указано, что бот меняет mime-type файла, вы просто не поняли английский.

Красиво, но не ново, php-бэкдоры издревле прячут в exif'ах jpg-файлов. :)

Тут гораздо интереснее то, что у них список не разрешённых разрешений, а запрещённых.

То есть, можно подобрать комбинацию технологий под какие-то конкретные решения и редко используемые расширения и атаковать кого-то конкретного.

php очень толерантен к мусору в файле, в отличии от python, который падает от лишнего пробела.

Вопрос в том, на чём ещё это сработает.

Какой софт может стоять у конкретного человека, к которому так можно обратиться?

Не вопрос. 1-3% пробив считается успешным.

Может, таки не "пробив", а "отстук"?

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

Из-за того, что gif является контейнером, то возможно сделать файл, который будет и валидной картинкой, и, например, исполняемым файлом одновременно. И то, что отображался прямоугольник, означает, что не очень заморачивались, и только.

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

Личный совет - используйте веб-версию Telegram (https://web.telegram.org) вместо десктопной

Мне кажется, ещё Unigram подойдёт как альтернатива - у него ограничения песочницы UWP служат как дополнительный барьер. Много из-под сильно огораниченного юзера с урезанной средой уж точно не поделаешь.

А официальный клиент Telegram из Microsoft store не работает в песочнице?

100% нет. Последние годы MS разрешила публиковать в Microsoft Store любые "классические" Win32-приложения практически без ограничений и дополнительных модификаций. Более того, даже с теми же кастомными инсталляторами, то есть скачивается инсталлятор, 100% идентичный такому же напрямую с сайта. По этой причине там можно найти Python, PowerShell и т. д.

А именно модель UWP с соответствующими ограничениями утилизируют всё меньше и меньше приложений, так как M$ это фактически депрекейтнули и написали план по миграции. А жаль, такая модель много где могла выстрелить!

Не знаю кому верить. В Telegram уверяют, что информация про zero-click - ложь. И в целом логично. Потому что я не представляю, с чего вдруг файл должен запускаться автоматически. А с кликом всё понятно, кликнул - открыл в ассоциированной программе (как текстовый или любой другой файл). И список плохих расширений тогда тоже логичен. И всё вот это про mime-тип, про превью к видео - тоже становится логичным. Потому что какая разница превью или нет, если бы скрипт запускался без действия пользователя.

Можете прочитать https://habr.com/ru/articles/807535/comments/#comment_26724291

Я так понимаю без интерпретатора python ничего не сработало бы все равно?

Да. Но из-за того, что Telegram блокирует исполняемые файлы по черному списку расширений, таких багов может быть больше.

Мало того, что это чушь, так это еще и перепост из канала "НеКасперский" без отсылок? Сижу в обоих чатах с разработчиком Telegram Desktop, тема обсуждается уже сколько дней, так вот, коммит НЕ связан с видео - это результат обсуждений "а какую бы еще защиту от дурака впихнуть", поскольку клика оно таки требует. Процитирую комментарий оттуда:

Sominemo, [14 Apr 2024 20:39:42]
Эта опечатка не связана, ее просто между прочим поправили. "Уязвимость" на разлетевшемся видео показывает картинку, которая при самом отображении, без каких либо кликов, исполняет код.

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

В Telegram Desktop уже была другая похожая уязвимость, когда можно было залить exe-файл под видом сломанного видео, но:

  1. для исполнения всё равно нужно было кликнуть по видео

  2. desktop показывал предупреждение о попытке запустить исполняемый файл

  3. чтобы запустить pywz всё равно нужно, чтобы на ПК была установлена среда для разработчиков Python.

Ещё раз повторюсь: это исправление не связано с разлетевшемся видео, так как на нём отправлялась картинка и не требовала кликов. Уязвимость, которую показывали на видео, никому так и не удалось подтвердить.

Здравствуйте! Хочу прояснить пару вещей.

  1. Эта статья написана лично мной от начала и до конца. Про существование указанного канала я ничего не слышал. Ваши претензии о воровстве ошибочны.

  2. Действительно, эта уязвимость требует клика для воспроизведения видео. Это не zero-click уязвимость, о чем было написано в официальном Twitter Telegram.

  3. При клике на файл не появляется никакое окно с подтверждением, как с exe файлами, о которых вы упомянули. Сразу же вызывается код. Сейчас это поведение прикрыто костылем в виде того, что ко всем скачиваемые файлам с расширением .pyzw на серверной стороне добавляется ".untrusted".

  4. Похоже, видео в статье действительно фейк, и именно это ввело вас в заблуждение. Я могу предоставить видео с воспроизведением one click уязвимости - она действительно есть (была), и я честно рассказал о ней все, что мне удалось выяснить.

Насчет каналов, сейчас этого хайпа и кликбейта постят, не разобравшись, все подряд, может и наоборот украли, но в общем пофиг. По сути из Telegram Info передают вот что:

Sominemo, [15 Apr 2024 00:51:38]
Для pwn'а надо было или иметь на ПК жертвы Python SDK, или использовать неэкзотический формат исполняемого файла — но в последнем случае жертва увидела бы предупреждение об исполняемом файле. Ну и заставить жертву кликнуть по сломанному видео. Поэтому зона покрытия и серьёзность уменьшается.

Да и описываемый случай не подпадает под понятие RCE в общем понимании — а в заголовке именно крики про RCE, сразу надумывается возможность запуска кода от одного лишь прочтения сообщения.

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

В статье написано, что уязвимость "действительно была", и предоставляется видео одной теоретической, неподтверждённой уязвимости, которая выглядит, как RCE, а потом показывается совсем другая, не та, что на видео, которая под определение RCE может подпадать только если его очень сильно растягивать — до такой степени, что любая малварь будет RCE.

Перепишите, повесьте сверху UPD или удалите статью.

Насчет предоставления видео - можете предоставить, но простой вопрос: свежеустановленный Telegram спрашивает подтверждение на этот клик?

Нет, не спрашивает. Он просто скачивает и предлагает открыть файл с расширением ".untrusted". Такой вот серверсайдный костыль

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

Так файл запускался или нет?

При клике на любой прикреплённый файл телеграм клиент открывает этот файл ассоциированной в конкретной системе с его расширением программой (просмотрщик картинок для jpg, word для docx и так далее). Если расширение из чёрного списка (exe и прочие), то есть дополнительный запрос (хочет ли пользователь открыть).

У тех, у кого установлен python, при клике на pywz запускался python. Без дополнительного запроса, потому что расширение не было в чёрном списке.

Sign up to leave a comment.

Articles