image
«Без разочарований не ощутишь вкус победы» © Мемфис Реймс

История началась банально. В каком то ролике на YouTube рассказывали про каршеринг. С демонстрацией функции «приветствия», когда вам не удается найти автомобиль на большой парковке. У меня тут же возникла мысль проверить — а не смогу ли я активировать функцию приветствия на абсолютно все автомобили этой компании?! Ну весело же. Крупный российский город. И в какой то момент тысячи автомобилей по команде начинают сигналить и моргать фарами. Почти как в фильме «Крепкий Орешек 4».

В результате все получилось куда интереснее. Ведь фактически я нашел возможность угона любого автомобиля.

Внутри приложения для пользователей все стандартно. Загрузка ресурсов, splash-screen и форма входа в приложение.

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

От отчаяния я догадался ввести +7 000 0000000. И удивлению не было предела, когда появился следующий шаг с предложением ввести код из sms. Еще запустился обратный отсчет на 60 секунд, намекающий о том что срок жизни пароля очень короткий. И что нужно торопиться.

image

Как так? Какое sms если номер вообще не может быть реальным?!

Эта ситуация заставила меня сделать несколько выводов:

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

Т.е где то в базе нас ждет пароль. Который был присвоен нашему красивому номеру +7 000 0000000.

Вообще такой метод аутентификации пользователя принято называть OTP (One Time Password).
Т.е пароль, который нам «присвоили», должен быть использован только один раз.

Вроде бы тупик. Можно выключать ноутбук, телефон и ложиться спать. Но меня не отпускала мысль — а что если подобрать этот пароль? Ведь у нас всего 10000 возможных вариантов! Успешность этой затеи была сомнительная. Можно было словить капчу, блокировку, в конце концов, я своим подбором мог спровоцировать единичный вызов «успешного пароля». И в формате OTP, повторное использование этого пароля не допустимо. Что же говорить о таймере обратного отсчета, который уже давно закончился.

Подходящий момент для этой гифки.

image

Ловлю запрос ввода пароля. Делаю пароль — динамическим параметром. Устанавливаю диапазон возможных значений для перебора. Со скрещенными пальцами запускаю атаку на подбор. В процессе подобных атак я никогда не пытаюсь маскировать свои действия. Не подменяю ip адреса. Не пользуюсь VPN. Не ставлю маленькое количество потоков. Мне это не надо. У меня нет мотивации чтоб меня не заметили.

Через 60 секунд на глаза попадается ответ сервера. Найден успешный пароль.

Но получится ли использовать его повторно? Ведь это One Time Password.

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

image

Ставлю курсор в поле с паролем. Стираю ранее веденный, ввожу успешно подобранный пароль и нажимаю кнопочку входа.

И тут очередная проблема. Приложение говорит что мы какой-то «не подтвержденный пользователь». И выбрасывает через пару секунд на главную страницу.

Или мне не удалось реализовать все задуманное. Или мой пользователь реально не прошел какую то модерацию, подтверждение документов и все такое…

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

Ну как вы понимаете друзей в столь позднее время, я даже если бы захотел, не нашел.
По-этому я пошел искать пользователей. Это было самое легкое. В социалочках нашел официальные сообщество каршеринга. Посмотрел комментарии последних публикаций. Открыл страницы нескольких пользователей. На 3 или 4 профиле одного из пользователей удалось обнаружить опубликованный мобильный номер.

image

Взял этот номер и пошел проверять теорию о взломе.

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

image

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

Т.е у меня была абсолютно открытая возможность взять любой автомобиль в аренду без предъявления требуемых документов. При этом взять автомобиль и расплатиться от лица взломанного пользователя. Оплачивать возможные штрафы от ГИБДД пришлось бы так же нашей жертве.

image

К этому моменту у меня просто пропал сон. Безусловно, то что я получил доступ к учетной записи пользователя — это не правильно. Но благодаря этому мне удалось обнаружить опасную логическую уязвимость.

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

Люди адекватно отреагировали на ситуацию. Без возражений приняли во внимание все проблемы, которые я обнаружил. И приступили к исправлению. Через 1-2 недели проблемы были устранены. Мне даже был предложен автомобиль в бесплатное пользование на несколько дней. Но я предпочел не усложнять себе жизнь чужим авто в чужом городе (в период командировки).

Из всей этой истории нужно сделать следующие выводы:

  • Не стоит пренебрегать защитой от Brute-force.
  • Проверяйте формат номера телефона если он используется в качестве логина.
  • После однократного использования OTP не должен работать.
  • Срок жизни OTP должен быть коротким, даже если его не использовали.
  • В качестве логина не стоит использовать номер телефона.
  • Лучше делать дополнительную авторизацию пользователя при аренде автомобиля через PIN-код (код, который устанавливает сам пользователь при регистрации). Этот PIN-код пользователь должен вводить для того чтобы разблокировать автомобиль.

Такие дела.

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


  1. sshmakov
    24.11.2017 12:00

    Что-то мне эта статья (в сочетании с профессией автора) напомнила историю про собеседование идеального тестировщика.


    1. Valya-roller Автор
      24.11.2017 12:29

      У меня примерно так и получилось с моим последним сотрудничеством на одну крупную фирму. После репорта о критической уязвимости, они очень охотно присылают теперь предложения протестировать то или иное приложение.


  1. Apatic
    24.11.2017 12:18

    Судя по скриншоту, Белка кар? Один из лидеров рынка.

    Что же творится у менее крупных каршерингов, которых нынче в Москве уже более 10 штук…


    1. Valya-roller Автор
      24.11.2017 12:26

      «Штирлиц как никогда был близок к провалу» ;)
      На самом деле я бегло пробежался по нескольким из них. А то мало ли беду навлеку. Одни товарищи даже были уведомлены о неосторожной работе с данными. Но последствий после моего сообщения не последовало, к сожалению… :(


      1. Apatic
        24.11.2017 12:42

        А что за каршеринг, который не ответил? Я почти во всех зарегистрирован, хотелось бы понять, какой из них для меня опасен :)
        Можно в ЛС.


        1. Valya-roller Автор
          24.11.2017 13:35

          Я абсолютно все не смотрел. Так что за все не ручаюсь. Серьезного для пользователей там ничего не было. А вот для самого каршеринга опасность есть. Но они решили что поживут видимо с этим.
          Всю эту ситуацию надо воспринимать как напоминание о том что никто не в безопасности. Завтра найдут зеродэй и даже те кто были в безопасности перестанут там находится. Я склонен пользоваться подобными вещами с осторожностью. И не привязывать карты на которых внушительные суммы могут быть. Для интернета у меня всегда отдельная карта.


  1. Ugrum
    24.11.2017 12:22

    Красивая и поучительная, почти детективная история. Респект автору.


    1. Valya-roller Автор
      24.11.2017 12:27

      Спасибо!


  1. vism
    24.11.2017 12:42

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

    Поэтому не ввожу данные карт и стараюсь использовать всякие сервисы по минимуму.
    Насмотрелся я на кухню этих Федеральных компаний изнутри. Снаружи конфетка, а внутри такие же говнокодеры как и везде)

    Как-то был на собеседовании в подпроект для Госуслуг(ДЛЯ ГОСУСЛУГ!!!), где используются соответственно все данные.
    Цитирую слова нанимателя «Проект работает, но нужно дорабатывать и рефакторить код. Код конечно там очень легаси, проект начинали писать 7 лет назад, но потом он перерос в данный. и уже 2 года работает как часть госуслуг. Нам туда очень нужен человек и ближайшие пол года вы будете там работать один.»
    Тоесть не зная меня, и что я могу натворить с безопасностью, как минимум, меня на пол года хотели поставить на работающий проект где происходить обработка таких данных:)

    Ну нафиг веб сервисы))


  1. Akuma
    24.11.2017 12:53

    А я так надеялся, что все закончится массовым бибиканьем :(


    1. Valya-roller Автор
      24.11.2017 13:37

      Вроде бы мы с этой компанией договорились посмотреть их сервисы по подробнее. Так что может удасться еще по бибикать :)


  1. RusXP
    24.11.2017 12:53

    а можно поподробнее, каким образом подбор был реализован. Разве трафик между клиентом и сервером не зашифрован?


    1. Valya-roller Автор
      24.11.2017 13:40

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


      1. RusXP
        24.11.2017 13:50

        Спасибо, статья получилась интересной) У самого есть аккаунт в belkacar


  1. meequz
    24.11.2017 13:36

    Я так понял, посигналить всеми машинами вы не попытались?


    1. Valya-roller Автор
      24.11.2017 13:40

      пока нет) но все впереди.


      1. RZimin
        24.11.2017 17:33

        А я думал, чего вчера белкина машина стояла аварийкой в ночи мигала…


  1. NTG24
    24.11.2017 13:40

    Пошел удалился из каршеринга…


    1. Valya-roller Автор
      24.11.2017 13:44

      не нужно поспешных решений принимать. используйте просто отдельную карту для «интернетов» и вероятно все будет хорошо.
      youtu.be/KopWe2ZpVQI
      Посмотрев это вы же не перестанете пользоваться банками?


      1. NTG24
        24.11.2017 16:13

        А как я буду доказывать, что я не ехал на машине и не бросил ее где-нить у стен Кремля? :)


        1. M_AJ
          25.11.2017 10:04

          Или хуже, не сбил на ней кого-то.


  1. Vitaly83vvp
    24.11.2017 13:45

    Люди адекватно отреагировали на ситуацию. Без возражений приняли во внимание все проблемы, которые я обнаружил. И приступили к исправлению. Через 1-2 недели проблемы были устранены.

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


    1. Valya-roller Автор
      24.11.2017 13:46

      Это действительно так. Иной раз так стремно на контакт выходить если что-то случайно обнаружил… Каждый раз лотерея как твои замечания воспримут.


  1. Filex
    24.11.2017 15:51

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

    У «белки» отношении договора нормально, но через пару дней, после того, как я там зарегистрировался, на мой номер позвонили из некой «службы безопасности Сбербанка», назвали мое полное ФИО и просили назвать паспортные данные для «авторизации». Хотя в сбере я незарегистрирован, свой номер телефона в интернете не свечу.
    Конечно, может просто совпадение, но какое-то странное.


    1. Viacheslav01
      24.11.2017 19:10

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


      1. Filex
        27.11.2017 10:02

        Это были не СБ Сбера, а мошенники, которые хотели что-то от меня получить. Начали с попытки выяснить мои паспортные данные.


    1. devop-su
      27.11.2017 09:20

      Как минимум все эти компании не дают работать, не привязав предварительно карту.


      Так что карту "для работы с мудаками" обязательно приходится иметь на такие случаи.


      1. Filex
        27.11.2017 10:03

        Да, я завел себе виртуальную карту и все платежи в интернете провожу через нее. На основной карте заблокировал платежи через интернет.


  1. MacIn
    24.11.2017 17:38

    Кто знает без гугления или помнит, откуда взялась фраза «угнать за 60 секунд»? (Точнее, «угнана за 60 секунд»).


    1. F0iL
      24.11.2017 18:09

      Фильм с Николасом Кейджем же!


      1. MacIn
        24.11.2017 18:48

        Рука-лицо. Ну да, а почему этот фильм так называется-то?


      1. firej
        24.11.2017 19:14

        до фильма с Кейджем был оригинальный фильм 74 года
        image


        1. MacIn
          24.11.2017 20:01

          Вооот, уже теплее. Так, 74 год — Gone in 60 seconds. Почему? Кстати, оригинал на порядок интереснее в плане погони. В 74 году бОльшая часть фильма — погоня за Мустангом, в новом слишком много лирики.


          1. firej
            24.11.2017 20:02

            потому что надо фильм посмотреть?
            я так понимаю вы знаете ответ.


            1. MacIn
              25.11.2017 05:27

              Да, просто забавный факт. Без просмотра оригинала название не понять.
              В оригинале была сцена, где машину угоняют с парковки около автодрома. И там было табло-бегущая строка, на которой был текст «Lock your car, or it may be gone in 60 seconds».


  1. 123
    24.11.2017 18:44

    Атмосферный пост. Только у меня в голове при чтении звучало «Bring Sally up and bring Sally down»? ) www.youtube.com/watch?v=hJkm5R40Hj0


  1. Nuuuuuuu
    24.11.2017 19:13

    Зер гут, Вольдемар! Зер гут!


  1. Psychosynthesis
    25.11.2017 04:32

    Стоп, я немного не понял про OTP. Это что, получается вы смогли ввести успешно подобранный пароль к одному юзеру, в окно ввода пароля к другому юзеру, да ещё и после того как на первом окне закончился срок ввода?


    1. Tomatos
      25.11.2017 10:05

      На сколько я понял, нет — брутфорсился тот же пользователь (номер телефона со страницы в vk), просто по одному паролю получилось авторизоваться, как минимум, дважды и уже после того, как в форме авторизации написали, что пароль просрочен.


      1. Valya-roller Автор
        25.11.2017 12:56

        Да Tomatos, вы все верно поняли. Ну это и из выводов в конце статьи можно понять :)


  1. granade18
    28.11.2017 02:08

    Где технические детали ???
    А вообще уязвимость не серьезная. Все авто застрахованны по полной, компания купит новый. Клиент штрафы не будет оплачивать, так как штрафы приходят на собственника автомобиля.


    1. infolex
      28.11.2017 10:11

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


      1. dikansky
        28.11.2017 19:53

        приходят штрафы — операторы каршеринга прекрасно умеют сопоставлять время, место и ID клиента
        ДелиМобиль, кстати, теперь успевает в срок, достаточный, чтобы оплатить 50%