image

Добрый день. Меня зовут Алексей. Я занимаюсь написанием ботов и реверсом Android приложений с поиском в них уязвимостей.

Мне попало в руки приложение Рамблер/почта для Android. Цель была автоматизировать отправку почты средствами API мобильного приложения. Был запущен эмулятор MEmu и Charles, однако SSL отказывался показать свои запросы. В ход пошел реверс. В файле smali_classes2\okhttp3\OkHttpClient.smali были сделаны изменения, дабы убрать шифрование.

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

action=send¶ms={"to":{"hrthrtjrt12@mail.ru":"hrthrtjrt12@mail.ru"},"body":"<div><br><\/div>erherh<br>---<br>.","is_html":"1","subject":"ergerg","action":"send","bcc":{},"from":{"eherhregerg@rambler.ru":""},"uploads":[],"cc":{}}

Нам интересен параметр from. Вместо него можно подставить абсолютно любой адрес почты с Рамблера. Вот что приходит на Яндекс:

image

К счастью у Mail.ru и Yandex есть такая функция как «Служебные заголовки» и в них мы увидим:

Delivered-To: hrthrtjrt12@mail.ru
Return-path: <eherhregerg@rambler.ru>


Да. Технически мы видим реального отправителя, однако для рядового пользователя это скрыто и может стать средством фишинга.

Дальше больше. 1 аккаунт удалось загнать в бан с других аккаунтов просто добавив его адрес в поле from при отправке, письма от него не приходили. Однако если при отправке с этого «забаненного» аккаунта в поле From подставить любое другое мыло, то письма пойдут. Таким образом, мы понимаем, что Rambler считает отправителем юзера из поля from, а не реального.

В данный момент техническая поддержка Рамблера уже оповещена об уязвимости. Однако они ее таковой не считают. Цитирую:

image

Подобные попытки подмены и мобильных приложений Yandex и Mail.ru не сработали. К счастью, эти компании не такие «креативные». В их мобильных приложениях тоже есть уязвимости, но об этом в следующей статье. Надо же сперва оповестить разработчиков.

Данная статья — попытка исправить ситуацию и все таки признать это багом. Благодарю за внимание.
Это фича или уязвимость?

Проголосовало 539 человек. Воздержалось 96 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

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


  1. klev
    15.03.2017 21:04
    +20

    Сам протокол SMTP позволяет указывать любой обратный адрес, даже не существующий. Может, это проблема Mail.ru и Yandex, то что они недостаточно проверяют заголовки, и не помечают это письмо как подозрительное?
    Как например это делает Gmail.

    image


    1. gurux13
      16.03.2017 13:30

      А вот это очень интересно. Вы отправили письмо, используя описанную технологию или просто рандомный SMTP сервер, который не убеждается, что такой from: допустим?
      Если используя рандомный сервер, то это не то же самое (нет подписи).
      Если используя рамблер, тогда предупреждение gmail'а неадекватно — отправил rambler, но не admin@rambler.ru.


      1. klev
        16.03.2017 17:03

        Да, вы правы, использовал внешний сервис, который позволяет вставлять любой «from», согласен, что проверка не совсем корректная.
        Моя идея в том, что если есть малейшее подозрение в том, от кого пришло письмо, то об этом надо сообщать получателю, тем более, что сам протокол SMTP и надстройки над ним (DKIM и SPF) не обеспечивают достаточной верификации отправителя.


  1. neenik
    15.03.2017 21:09
    +3

    Вы очень непонятно объяснили проблему в статье. Думаю, и техподдержка не поняла проблему.

    Возможность указания поля from пользователем — это совсем не уязвимость.
    «Rambler считает отправителем юзера из поля from» — это тоже не уязвимость, а баг.


    1. gurux13
      16.03.2017 13:26
      -1

      С помощью этого дела можно забанить рандомного пользователя, хотя он ни в чём не виноват? Да. Значит, уязвимость.
      С помощью этого дела можно отправить письмо забаненным пользователем? Да. Значит, уязвимость.


    1. pr3dat0r
      20.03.2017 09:56

      Когда писал, я больше опирался на то «как это выглядит в глазах рядового пользователя». Если отослать письма с других почтовиков, так же с пересылкой, то они там отображаются по другому и не вводят получателя в заблуждение.


    1. ebragim
      20.03.2017 22:48

      Многие сервисы используют емейлы с определённого адреса для подтверждения операций. Из последнего — у корпоративной связи мтс есть сервис техподдержки, однозначно идентифицирующий вас именно по отправителю заявки.


  1. Akuma
    15.03.2017 21:29
    +3

    И что?
    Я могу простым скриптом на том же PHP отправлять письма от имени любого отправителя.
    Вот только все нормальные почтовики будут ругаться на такого отправителя или как минимум на несоответствие хоста.

    from — это лишь обратный адрес и ничего более. А уж письмо может быть отправлено откуда угодно.

    Вы точно так же можете бумажные письма отправлять с обратным адресом Рамблера.


    1. DaMaNic
      15.03.2017 22:54

      Тут я бы добавил, что можно попытаться сделать вброс писем с правильными записями DKIM и SPF, если сам домен отправителя находится в доверенных. Но скорее всего такой сервер скоро заблокируют, поэтому такие вбросы дорого стоят именно из за сложности и одноразовости действия.


  1. DaMaNic
    15.03.2017 22:34

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


  1. redfs
    15.03.2017 22:34
    +2

    Если речь идет о том, что в поле From можно подставить любой email адрес, то техподдержка Рамблер абсолютно права, не считая это багом.
    Это суровая реальность протокола.
    И этим часто пользуются спамеры. А антиспамеры придумали DKIM и SPF. И далее по кругу.


    1. dmitrmax
      16.03.2017 00:54
      +1

      Не совсем. В данном случае у письма будет всё в порядке с DKIM и SPF. Безусловно сервер-помойка позволит отправить с любым адресом в поле from даже с другим доменом — протокол здесь не нарушен, а вот политика антипомойности — да.


      1. redfs
        16.03.2017 08:17

        Любой smtp сервер должен позволить отправлять письма с любым адресом в поле From — и это не признак плохой «политики антипомойности».
        Если у отправителя есть права на отправку (например, успешный SMTP AUTH или отправка из доверенных сетей) то сервер обязан принять и отправить письмо вне зависимости от того, какой email подставлен в поле From. Все пляски с бубном делегируются принимающей стороне. Это нормально, так как соответствует RFC. Собственно это я и имел в виду.
        А помойка — это какой-нибудь open relay или ненастроенный MSA.


  1. barker
    15.03.2017 22:42
    +21

    Новую статью напишите о том, что в http-запросе можно вставлять любой referer)


  1. lgXenos
    16.03.2017 07:37

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


    1. flekst
      20.03.2017 22:48

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

      Лично я собираю письма из нескольких источников и не парюсь.
      Тот же гугл в поле отправителя указывает мой рабочий ящик и не светит личный.


      1. lgXenos
        20.03.2017 22:54

        А в чем взлом? Чет я не понял, если честно.
        Отправка от ящика от ящика, к которому введен логин-пароль. Т.е. куда веб-морда может залогинится от вашего имени. Т.е. все по тому, как я описал
        Не будет же мейл ру отправлять из своего сервера письмо, от имени на рамблере или гмайле


  1. Pakos
    16.03.2017 10:00

    Недавно пришёл какой-то спам «Рамблер-знакомства» от ящика типа admin@rambler.ru. После статьи даже не знаю — сам Рамблер спамит, т.к. от меня дождался тыкания по их рекламе или кто-то подделывает по описанному принципу адрес…
    Соответствие RFC — это хорошо, но уязвимость, соответствующая стандарту, всё равно остаётся уязвимостью(by design). Я Иванов, хочу от имени Петрова отправить бомбу. Вижу что Иванов, отправляйте, а что бить с большой вероятностью придут Петрова, так не наши проблемы. Хорошо если вторая сторона банит спамеров по Return-path, а не по From, чтобы Петров страдал меньше.


    1. redfs
      16.03.2017 10:58

      уязвимость, соответствующая стандарту, всё равно остаётся уязвимостью
      Опять про уязвимость… Друзья, давайте все-таки правильно выбирать термины. Нет в описываемом случае никакой уязвимости.
      если вторая сторона банит спамеров по Return-path, а не по From
      Нормальные спаморезки не банят только по полю From, больше скажу — и по Return-path тоже. Комплексный анализ заголовков состоит из сотен разных критериев с разными весами на основании которых и принимается решение — спам или нет.


      1. Pakos
        16.03.2017 13:44

        Хорошо, не уязвимость, а просто дыра в стандарте, которую никто не хочет закрывать. Если в стене оставили вентиляцию, но через неё открывается дверь, то пользователю двери не важно название термина. Даже если дверь на цепочке (нельзя представиться другим доменом, остаются следы в виде Return-path), то всё равно как-то не очень хорошо выглядит.

        >> из сотен разных критериев с разными весами
        Ну т.е. ящик спокойно можно использовать для рассылки спама, который ещё не ловится байесовскими фильтрами, потому как заткнуть фонтан конкретного пользователя нельзя. И где там сотни критериев, если заголовков не много?


        1. redfs
          16.03.2017 14:04

          Хорошо, не уязвимость, а просто дыра в стандарте, которую никто не хочет закрывать.
          Эта дискуссия ведется с момента появления стандарта. Основания простые — аналогия с обычной почтой. Вы можете отправить письмо кому угодно, указав обратный адрес кого угодно просто бросив его в почтовый ящик — и оно будет (как правило:) доставлено, если адрес получателя верен. email приближен к этому прототипу, хорошо это или плохо — в общем-то неважно.
          И где там сотни критериев, если заголовков не много?
          Ну, ради интереса полядите конфиги какого-нибудь spamassassin. Заголовков может и немного, много их сочетаний в разных вариациях + анализ содержимого.


        1. theRavel
          16.03.2017 14:09

          Как по-вашему работают все рассылки?
          Например есть приложение, которое посылает email'ы через third-party email platform (SendGrid, Mailchimp, Amazon SES, etc.).
          Например это приложение посылает вам email. Вы серьезно хотите там увидеть в поле «отправитель» что-то типа generated-1-2-3-hash@amazon.com? Конечно вы этого не видите, потому что From и Sender в данном случае отличаются и вы увидите там что-то типа support@application.com, хотя отправляющая платформа не владеет доменом application.com.

          В этом нет никакой уязвимости, это удобно и это стандарт. Если кто-то неправильно реализует спам-фильтры, это не проблема стандарта.

          Это конечно прекрасно что вы и ТС открыли для себя заголовки. Но этот пост… как бы так сказать… почему рамблер? Отправлять с кастомным from можно почти из любой почтовой системы, возможно это не всегда возможно сделать через UI.

          PS. вот вам еще пример с Linked-In email: http://stackoverflow.com/a/14555043/871861


  1. Ivan_83
    16.03.2017 15:48
    +1

    Стыдно должно быть, товарищи технические «специалисты».

    Итак.
    Есть протокол SMTP — это протокол по которому передаются письма.
    У вас, многих, каша в голове, и протокол SMTP смешан с mime данными — самим пересылаемым сообщением.

    Вот так примерно выглядит сильно упрощённый вариант отправки письма, без лишних команд и ответов серверов.
    MAIL FROM some_acc@rambler.ru
    RCPT TO: u1@rambler.ru
    RCPT TO: u2@rambler.ru
    DATA
    И ВОТ ТУТ НАШЕ ПИСЬМО С ЗАГОЛОВКАМИ!!!
    .
    QUIT

    «И ВОТ ТУТ НАШЕ ПИСЬМО С ЗАГОЛОВКАМИ!!!» — вот там в заголовках и содержимом что угодно. Сервер это не интересует.
    При получении он при создании файла дописывает туда служебку Received: from… и дальше пишет всё что шло после DATA.
    Ему плевать на содержимое, для него это пересылаемые данные от some_acc@rambler.ru к u1@rambler.ru и u2@rambler.ru.

    Все ограничения на From в письме — они в головах, обычно из почтовых клиентов для юзеров, где вольностей не позволяют дабы меньше глупых вопросов шло в ТП.


  1. whiplash
    16.03.2017 16:46

    /оффтопик/

    А как Рамблер прокомментирует вот это например?

    https://www.facebook.com/photo.php?fbid=1460164277347699&set=a.140948952602578.18963.100000624217935&type=3

    «А занятный эффект наблюдается для Rambler-почты (это веб; mail.rambler.ru:443) — несогласованные результаты теста на CVE-2016-2107 для одного и того же IP: признак уязвимости то обнаруживается, то нет (см. скриншот). Процессоры, что ли, разные на серверах? (Там эффект зависит от поддержки AES-NI.) Или более простой вариант: разные сборки ПО.»


  1. w9w
    17.03.2017 19:31

    На Ваше сообщение об уязвимости дали хоть какой-то ответ, а мои 2 письма по поводу open redirect на https://id.rambler.ru/account/ до сих пор игнорируют, уязвимость не исправлена уже около месяца.


  1. AndreyCarter
    20.03.2017 22:49

    На самом деле, работает это не только с рамблером: яндекс и маил.ру аналогично пропускает сообщения.
    Пытался через gmail подставить левый from — не прокатывает, выдаёт оригинальный sender.
    Специально зарегал ещё один левый мейл в почтовике: больше проблема в том, что никак не распознать от кого пришло письмо действительно (яндекс, маил.ру), лишь маленькая незаметная ссылочка у gmail

    Вот письмо от телеканала «ТНТ» на gmail (выадёт лишь оригинальный хостинг tut.by)
    image

    А вот письмо от Apple на mail.ru
    image

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