А вы уверены, что вы не робот? Капча это проверит!


Здравствуйте, дорогие хабровчане. Это вторая часть статьи про уязвимость Open Redirect страницы аутентификации Яндекса. Первая часть здесь.


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


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


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


Вкратце напомню, что было в первой части. Я исследовал на уязвимости редирект страницы аутентификации https://passport.yandex.ru/auth/welcome?retpath=... и заметил, что переменную retpath можно использовать для редиректа на внешний ресурс, если проксировать запрос через яндекс-переводчик.


Суть в том, что retpath реагирует только на доменные имена Яндекса — yandex.ru, dzen.ru, kinopoisk.ru и т.д., однако это ограничение можно обойти, если использовать переход на страницу с капчей, которая как раз находится в нужном нам домене https://translate.yandex.ru/showcaptcha?mt=.... Таким образом, мне удалось добиться перехода на домен translated.turbopages.org, который и является прокси-сервером через переводчик, retpath его также отбраковывает как внешний ресурс.



Хорошо заметен баннер переводчика сверху и отличная от загруженной ссылки адресная строка в браузере.


После того, как я описал это службе безопасности Яндекса, получил ответ, что переход на translated.turbopages.org это не круто и Open Redirect не входит в скоуп программы bug bounty. Денег мы вам не заплатим, но если сможете сделать честный редирект на внешний ресурс, то так уж и быть, добавим вас в зал славы.


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



Самое примечательное, это как он описывает сам процесс, а именно:


  1. Сперва пришла ссылка в письме с просьбой выгрузить статистику канала;
  2. Он её проверил(!) и посмотрел, что ссылка с известного и правильного домена, который он хорошо знал;
  3. Далее, уже после перехода по этой ссылке, его попросили ввести логин/пароль, мобильный телефон, код из смс и т.д.

Не то, чтобы я точно знал, но можно предположить с большой долей уверенности, что это и был фишинг. А теперь представьте на секунду, что вам приходит ссылка с предложением чего-нибудь с домена passport.yandex.ru и просьбой аутентификации… дальше продолжать не буду, как видно, это вполне рабочий метод. Вот тут у меня и возникает вопрос, почему в Яндексе подобную уязвимость не считают существенной (текст ответного письма будет опубликован далее).


И так продолжу разбирать саму уязвимость. То, что было описано в первой части — это по сути первый шаг, т.е. возможность с домена yandex.ru перейти на прокси-сервер переводчика.



Оставалось ещё сделать второй и третий шаги, т.е. — выйти за пределы переводчика (прокси-сервера) и связать переход со страницы аутентификации с этим выходом.


Второй шаг решился довольно просто, как известно в интернете есть очень популярный сайт, который делает честный редирект, это google.com.


Обратите внимание, что в ссылке домен google.com, но ведёт она на ru.wikipedia.org



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


В итоге получаем чистый переход на внешний ресурс!




Итак, как это можно использовать? Будь я чёрной шляпой, скорее всего, создал бы клон страницы аутентификации. После того, как жертва ввела бы правильные логин/пароль, retpath перевёл бы пользователя на мою фейковую страницу, на которой красными буквами было бы написано — “пароль не правильный, пожалуйста, введите его снова”. Частенько такое бывает, что пароль или логин не вводят правильно, думаю, что это не вызовет сильного подозрения.


Первый бонус: через какое-то время, примерно сутки, вводить капчу не требуется, т.е. можно сразу перевести пользователя на сайт злоумышленника.


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



Причём, эта стрелка появляется только тогда, года в retpath подставлен домен Яндекса.


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


Более подробное описание шагов можно посмотреть в этом видео:



Письмо с ответом из Яндекса:


Мы решили добавить Вас в Зал Славы за этот месяц. Нас вдохновил Ваш исследовательский дух, однако стоит уточнить, что полноценным Open Redirect мы данную уязвимость всё ещё не считаем, и добавляем в зал славы Вас в качестве исключения. На это есть несколько причин.

Во-первых, для реализации этого сценария требуется 3 клика от пользователя (1 по самой ссылке, 1 на экране регистрации и 1 на капче), в то время как Open Redirect — это почти всегда 1 клик (иногда бывает и 0). Чем больше требуется user-interaction с пользователем, тем меньше значимость это уязвимости. Возвращаясь к текущему функционалу злоумышленнику будет проще воспользоваться укротителем ссылок и убедить пользователя, что он сделал это для его удобства, чем объяснять как и зачем ему нужно тыкать в текущем сценарии.

Во-вторых, этот функционал мы не будем исправлять. По крайней мере пока не понятно, как это сделать. Наша команда смогла придумать ещё один способ выхода за пределы домена translated.turbopages.org. А именно, использовать простенький javascipt-код, который бы делал document.location = “https://attacker.com/“.

Тем не менее, благодарим Вас за проделанное исследование и ждём от Вас ещё репортов!

P.S. меня добавили в зал славы за июль 2023 года, и на том спасибо.

Комментарии (9)


  1. Slonser
    31.07.2023 04:04
    +3

    Автор молодец, что пытался максимизировать свою прибыль и попытаться раскрутить вектор, но это не является уязвимостью. Если ознакомиться с правилами багбаунти Яндекса, можно увидеть:

    открытые перенаправления, но если только проблема не влияет на безопасность сервиса, например, позволяет украсть пользовательский аутентификационный токен.

    Это стандартная практика, такие правила выставляют все программы на h1. Так как прямого импакта нет, его можно достичь только соц.инженерией


    1. DimaFromMai Автор
      31.07.2023 04:04
      -1

      Нет, конечно это не прямая атака на данные пользователя, но всё же для соц.инженерии появляется хорошая почва.


  1. aborouhin
    31.07.2023 04:04
    +1

    Хм... Но ведь после перехода на страницу, на которую делается редирект, в адресной строке уже ни разу не домен Яндекса, а совершенно другой.

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

    А если пользователь не продвинутый и про то, что значат какие-то странные нерусские буковки в той строчке, куда он поисковые запросы пишет :), понятия не имеет (каковых 95%) - так он что с редиректом, что без оного введёт что угодно, зависит только от убедительности фишингового письма.


    1. DimaFromMai Автор
      31.07.2023 04:04
      +2

      Тут скорее расчёт на то, что не должно быть редиректа на внешний ресурс. Например, я когда по хабру хожу, честно говоря не смотрю на адресную строку. Вбил один раз habr.ru и поехал. Здесь также, посмотрел один раз, вроде домен верный, яндексовый, поехал сёрфить… а он тебя за пределы Яндекса переводит, причём без твоего ведома.


      1. aborouhin
        31.07.2023 04:04

        Ну одно дело, когда я просто хожу по Хабру, Яндексу и пр. Другое - когда меня сначала почему-то просят ввести пароль, а после этого возникает подозрительная ситуация (он вдруг неверным оказывается). В общем, я ровно про то, что эффективность фишинга если это и повысит - то в очень незначительном количестве случаев. Большинству вообще пофиг на домен в адресной строке, а те, кто на него обращает внимание, (а) насторожатся (б) у них вообще 2FA, (в) попробуй ещё достаточно убедительное фишинговое письмо для таких параноиков составь :)


        1. DimaFromMai Автор
          31.07.2023 04:04
          +1

          Согласен, параноика не провести. Тут скорее схема как с Артемием Лебедевым. Придёт письмо вида: "Здравствуйте aborouhin, очень нам понравился ваш коммент, можете нам скинуть на него статистику, которая находится по этой ссылке в вашем аккаунте https://account.habr.com/login..., не за бесплатно конечно же, заплатим сколько скажете!". Вот в общем виде что-то подобное будет, а вводить логин и пароль просить никто не будет.


  1. avost
    31.07.2023 04:04
    +1

    мою фейковую страницу, на которой красными буквами было бы написано — “пароль не правильный, пожалуйста, введите его снова”.

    Интересно, почему все фишеры палятся на грамматических ошибках? :) Или вы это намеренно? ))


    1. DimaFromMai Автор
      31.07.2023 04:04

      В точку. Это только типичный пример :)


  1. lukasafonov
    31.07.2023 04:04
    +1

    К слову, гугол тоже не принимает open redirect'ы без серьезного импакта.