[BugBounty] Раскрытие 5 миллионов ссылок в приватные чаты Telegram и возможность редактирования любой статьи telegra.ph

[BugBounty] Раскрытие 5 миллионов ссылок в приватные чаты Telegram и возможность редактирования любой статьи telegra.ph

habrahabr.ru

Вот уже больше года я пользуюсь мессенджером Telegram: это удобно и, насколько мне казалось, полностью конфиденциально. Так как я исследователь безопасности web-приложений, то должен был проверить соответствующую версию приложения на уязвимости. Я не видел в этом острой необходимости из-за репутации мессенджера как «самого защищенного». Я думал, что зря потрачу своё время и ничего не найду. Но недавно, тестируя один сайт, который взаимодействовал с доменом t.me, мне довелось усомниться в безопасности Тelegram, и решимость проверить его на уязвимости быстро возросла.

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

Регистрация на сайте доступна только по реферальным (пригласительным) ссылкам, а так же есть раздел для отправки сообщения куратору example.com/profile#curator. После тестирования здесь не оказалось ни csrf, ни xss, ни какой-либо другой уязвимости. Но особое внимание привлек раздел с сообщениями example.com/messages, где была представлена переписка с моим куратором example.com/msg132591. Я решил проверить этот url на iDOR уязвимость, увеличив id на одну позицию, и уязвимость подтвердилась — я увидел личные данные другого пользователя. Так как на сайте не было функции для отправки сообщения другим юзерам, мы можем с точностью говорить об iDOR + Disclosure Information.

Двигаемся дальше — покупаем товар, после его успешной покупки происходит редирект на этот url example.com/?pay_act=success&text=Вы%20успешно%20%20купили%20продукт, при этом, текст можно редактировать — в основном, символы фильтруются, но есть место, где текст попадает в и никакой фильтрации нет. Пишем вот такой payload <iframe/onload=alert(document.domain)> и отсылаем PoC владельцам ресурса. Также там был намёк на Server Side Include, но exec cmd отключена, при таком пейлоаде --#exec cmd="ls" --> (<! в начале, хабр не показывает этот payload) выбивало ошибку swal(' ', '"-->\'-->`-->[an error occurred while processing the directive](none).

Также, заметил страницу с товарами example.com/?pageid=13156, там нашлась слепая sql injection. В качестве доказательства опасности меня попросили предоставить названия бд и таблиц. Руками раскручивать слепую скуль очень долго, поэтому на помощь пришла программа sqlmap:

После этих трёх уязвимостей была обнаружена CSRF в изменении личных данных, которая вела к захвату аккаунта путём восстановления по email, Stored XSS, а также мелкий баг, который позволял купить товар за цену в два раза меньше, чем его оглашенная стоимость. Главной опасностью этих всех уязвимостей (не считая sql injection), на мой взгляд, была рассылка по спарсеным email-адресам, ссылки на xss в связке с csrf и вывод реферальных начислений на реквизиты злоумышленника. Затем нашлась та самая уязвимость, которая заставила меня усомнится в безопасности telegram для web.

Обычно, в разделе настроек присутствует кнопка для подключения бота, с помощью которого можно получать рекомендации на торги криптовалютой. Кнопка привязана к такой ссылке t.me/Another_bot?start=CODE.

Имея привычку постоянно проверять чувствительные данные в url на размещение в поисковиках (например, я находил дорк twitter или обменников), на этот раз я проверил t.me. Дорк получился такой: site:t.me inurl:Another_bot?start=. Мне выдало один код, и, успешно залогинившись в бота, я начал получать инсайды стоимостью $500, смог увидеть ФИО партнеров и баланс аккаунта.

Судя по тому, что код к телеграмм-боту появился в поисковике, на t.me присутствуют явные проблемы с запретом индексации конфиденциального контента. Это происходит из-за того, что поисковикам это разрешили. А разрешено им это потому, что нету запретов в файле robots. При попытке его просмотреть t.me/robots.txt происходит редирект на страницу пользователя, то есть, этого файла не существует.

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

1) Некоторые пользователи используют email в качестве имени или username. Вся эта информация попадает в поисковик, хотят пользователи этого или нет https://www.google.ru/search?q=site:t.me+%40gmail.com. Раскрывается 11600 gmail адресов, 1500 yahoo, а также mail.ru, hotmail и qq.com. Но такое раскрытие — спорное доказательство опасности, потому что это публичная информация.

2) Раскрывается 5 000 000 ссылок для доступа в приватные чаты и каналы. Более того, с каждым днём эта цифра растёт, потому что нет robots.txt. https://www.google.ru/search?q=site%3At.me+join.

Первая проблема, на мой взгляд, в том, что ссылки на приватные чаты/каналы останутся в поисковиках навсегда, их невозможно будет удалить. А ведь многие люди доверяют Telegram, долгое время не меняя ссылки для доступа. А может быть, и никогда не поменяют, думая, что их переписки полностью конфиденциальны. Но это не так: теперь любой человек может прочитать переписку сотрудников, силовик может узнать о заговоре террористов, а твоя девушка о том, что Ленка из соседнего двора не просто «старая знакомая из детства». Сам факт слива такого большого количества ссылок для доступа «сводит концепцию приватных чатов на нет».

Вторая, не менее волнительная проблема, заключается в том, что разработчики абсолютно «беззаботно» относятся к данной уязвимости, и с каждым днём количество ссылок увеличивается. Если во время моего репорта (7 января) в Google было 900 000 таких ссылок, то сейчас их 5 000 000! Я согласен с тем, что среди всех этих ссылок есть «кликбейтные» телеграмм-каналы, которые в рекламных постах используют ссылки t.me/joinchat/*************** для того, чтобы «набивать» количество подписчиков, но также там есть очень много приватных чатов и других каналов. До сих пор разработчики не добавили robots.txt на t.me (прошло больше трёх месяцев с момента репорта), и, думается, никогда уже и не добавят. Было бы желание, добавили бы сразу, это ведь совсем не сложно — просто загрузить txt файл в индекс сайта.

Просматривая дорки, я обнаружил вот такой интересный url https://www.t.me/iv?url=https://www.yashahid.com/9173/. Интересно здесь то, что это ссылка не на канал/человека, а прямой редирект на сайт ИГИЛ (скорее всего), и только этот сайт использует /iv? с 2015 года по сегодняшний день. В контактах тоже указана ссылка www.t.me/iv?url=https://www.yashahid.com/9173.

Подставляем другой сайт в url= для тестирования t.me/iv?url=https://securityz.net, всё сработало — это вторая уязвимость в Telegram — Open Redirect, можно использовать как proof of concept, Open Bug Bounty подтвердил наличие и устранение. Уязвимость позволяет сделать прямой редирект из t.me на любой фишинговый сайт, скачивание трояна, вредоносный js (например, js майнер или использование последнего 0-day в процессорах intel) и др.

После этого, я двинулся к сервису создания статей от Telegram — telegra.ph. Редактировать чужие записи нельзя, xss нету(наверное, bo0om всё нашёл), поддоменов всего один, брут директорий так же ничего не дал. Я создал тестовую статью и попытался её отредактировать — в ответ на это действие отправляется вот такой запрос

POST /save HTTP/1.1
Host: edit.telegra.ph
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Referer: http://telegra.ph/img-srcx-onerrorprompt1qw22qw-01-18
Content-Type: multipart/form-data; boundary=---------------------------TelegraPhBoundary21
Content-Length: 1273
Origin: http://telegra.ph
Cookie: tph_uuid=80SI6VtGetOhKd5LaFjBRtK7I6EsdW0lWS21LvFZWt
Connection: close
-----------------------------TelegraPhBoundary21
Content-Disposition: form-data; name="Data";filename="content.html"
Content-type: plain/text
[{"tag":"p","children":[{"tag":"br"}]},{"tag":"figure","children":[{"tag":"div","attrs":{"class":"figure_wrapper"},"children":[{"tag":"img","attrs":{"onerror":"alert(1)"}}]},{"tag":"figcaption","children":[""]}]},{"tag":"p","children":[{"tag":"br"}]},{"tag":"figure","children":[{"tag":"div","attrs":{"class":"figure_wrapper"},"children":[{"tag":"video","attrs":{"src":"http://telegra.ph/file/a805d892df19325688e25.mp4
","preload":"auto","autoplay":"autoplay","loop":"loop","muted":"muted"}}]},{"tag":"figcaption","children":[""]}]},{"tag":"p","children":["\">qw{{2+2}}qw"]}] -----------------------------TelegraPhBoundary21 Content-Disposition: form-data; name="title" "> -----------------------------TelegraPhBoundary21 Content-Disposition: form-data; name="author" -----------------------------TelegraPhBoundary21 Content-Disposition: form-data; name="author_url" -----------------------------TelegraPhBoundary21 Content-Disposition: form-data; name="page_id" 3b25803ca519a088c0c75 -----------------------------TelegraPhBoundary21--

Судя по этому запросу, для того, чтобы отредактировать статью на telegraph, нужен только номер страницы page_id. То есть никакой защиты, например csrf токенов, здесь попросту нет.

Третья уязвимость — это CSRF. Я выяснил, что токен находится в исходнике статьи, например, статье telegra.ph/Durov-01-22 принадлежит id 7f0d501375c9e2acbd1ef:

Так как статью можно ещё редактировать очень долгое время, мы просто узнаем page id, делаем автоматический эксплойт и успешно изменяем запись.

Видео

С помощью telegra.ph создается большое количество статей, поэтому эта уязвимость будет очень ценной для злоумышленников, так как позволяет изменить, например:

  • — статью с важной новостью;
  • — статью с обновлением криптовалютного кошелька (и любого другого сайта);
  • — статью, где есть реф. ссылки, заменяя их на свои — на этом, кстати, можно заработать очень много денег — в своей статье habrahabr.ru/post/343152 я рассказывал о том, как некий инвестор заработал на публикации своей реф. ссылки $300 000, и, так как его контакты всем известны, можно было сбросить ему эксплойт, подменить реф ссылку, и это действие было бы незаметным.

Я отправил эти уязвимости на security@telegram.org, как и сказано в их сообщении о bug bounty, также, упоминание о bug bounty есть на площадке BugCrowd.

Долгое время я не получал ответа. Потом я написал Павлу Дурову (это было глупо, согласен, ведь ему, кроме меня пишет много людей, и он не читает личные сообщения), а также, попросил знакомых поделиться контактами разработчиков. Отправил сообщение разработчику t.me/dmitry, но ему было все равно на уязвимости, он просто прочитал и проигнорировал письмо. Потом отправил письмо vk.com/antanubis. Он передал, чтобы проверили ящик и приняли мои уязвимости. Уже через 9 дней после репорта мне ответили.

По первой уязвимости я получил такой ответ:

«Всё, что отображается на страницах t.me — username, bio, посты из публичных каналов — публичная информация»

При этом, разработчик уклонился от ответа на сообщение о раскрытии приватных ссылок. После того, как я второй раз показал на приватные ссылки для доступа, ответили, что исправят уязвимость и заплатят €50. Но, как уже оговаривалось, даже через 3,5 месяца никакого исправления нет. Даже наоборот, ситуация ещё больше обострилась.

Как вы и сами понимаете, награда €50 для такой уязвимости мизерная и, можно даже сказать, несправедливая. Но это Bug Bounty, и они сами решают, сколько заплатить. Я не стал дальше дискутировать и просто согласился с суммой. Но за последнюю уязвимость я получил довольно щедрую награду, и, именно из-за таких «качель», сложно сделать какой-либо вывод об этой Bug Bounty, в отличии от vk.com, например.

В итоге, я получил такие награды за присланные уязвимости:

Поиск уязвимостей на сайте клуба

  1. Blind Sql Injection — $4000.
  2. Уязвимость, раскрывающая коды к боту — $1000.
  3. Всё остальное — $1500.

Telegram

  1. Disclosure Information — €50.
  2. Open Redirect — €100.
  3. CSRF telegra.ph — €1400 ($1750).

Вывод из статьи:

  • Всегда добавляйте robots.txt на сайт с правилами, которые запрещают индексацию чувствительного контента. Это может быть email, логин, телефон, ссылка с квитанцией, ссылка для автологина и др.
  • Если вы создали приватный чат, добавьте туда кого нужно и не передавайте ссылку, ведь ссылка для доступа рано или поздно станет публичной и её можно будет увидеть в поисковике.

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

P.S: Чтобы быть в курсе моих последних статей, рекомендую подписаться на telegram/twitter, ссылки внизу.

Source habrahabr.ru

Report Page