Безлимитное облако и заурядные уязвимости

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Волей случая наткнулся на приложение «IngoMobile» компании Ингосстрах.


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



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


Безлимитное облако


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


https://ingomobile.ingos.ru/api/user/profile/avatar

Ответ:


{
  "header": {
    "error_code": 0
  },
  "data": {
    "id": "81738613503"
  }
}

Пробуем загрузить файл, отличный от изображения — успех. Единственное ограничение такого облака: размер файла порядка 20-30 Мб.


Заурядные уязвимости


Так, файл мы загрузили, а как скачать? Пожалуйста:


https://ingomobile.ingos.ru/api/file/{id}

https://ingomobile.ingos.ru/api/file/81738613503

Здорово, а если id перебрать? То можно многое узнать.
Метод отдачи файла не контролирует доступ к нему.
Таким образом, за небольшой промежуток времени удалось обнаружить:


  • Сканы паспортов, птс и ср, водительских удостоверений, договоров купли продажи и т.д.
  • Расчеты страховой премии
  • Фотографии всего, что страхуют, до и после страховых случаев
  • Письма(.msg outlook), запросы, поручения и прочая приватная информация
  • Ссылки на оплату и счета об оплате
  • Прочие файлы

Схожие проблемы есть и у остальных методов api, самый примечательный из них:


policies/info/bank_card/{id}

который отдает такие поля, как:


card_valid_thru, card_number, card_holder

но к сожалению(или к счастью) мне не удалось подобрать нужный id.


Другие проблемы коснулись регистрации и номера телефона пользователя.
При регистрации от нас просят паспортные данные:


{
  "last_name": "К",
  "first_name": "К",
  "middle_name": "К",
  "doc_series": "3214",
  "doc_num": "567890",
  "doc_date": "21.11.2018",
  "doc_issued_by": "12",
  "birthday": "21.12.1998",
  "city_id": "33209416",
  "mail": "c7015346@urhen.com"
}

И мы получаем в ответ что-то вроде:


{
  "header": {
    "error_code": 0
  },
  "data": {
    "ais_user_id": "10596623603",
    "user_id": "628001203",
    "found": false
  }
}

Казалось бы, все хорошо, но нет.
Знаете ФИО клиента, но нет серии и номера паспорта? Перебирайте их в запросе на регистрацию, пока не получите "found": true.


Далее у нас на очереди смена номера телефона. Запрос на изменение номера выглядит следующим образом:


{"ais_user_id":"10596638503", "phone": "9628112489"}

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


В чем соль?


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


  • 2 ноября 2019 уведомляю на почту об уязвимостях, получаю автоматический ответ.
  • 5 ноября 2019 пишу в сообщения сообщества вк, получаю чуть менее, но все же автоматический ответ.
  • 8 ноября 2019 пишу в вк и на почту подробный обзор уязвимостей.
  • 18 ноября 2019 звоню в поддержку, уже лучше.
  • 19 ноября 2019 получаю письмо "Мы получили ваш отчет и передали нашим специалистам на анализ и исправление.".
  • 20 декабря 2019 все на своих местах.

Если Вы клиент Ингосстрах, есть ненулевая вероятность, что все переданные компании данные давно утекли.


Спасибо, что дочитали! Рекомендаций по безопасности не будет, потому что все текут, но хотя бы своевременно лотают дыры.


P.S. Кстати о соли, ребята зачем-то делают в приложении md5 от пароля, перед тем как отправить на сервер, наверное для безопасности.


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

Источник: https://habr.com/ru/post/481888/


Интересные статьи

Интересные статьи

Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.
Операционных систем без уязвимостей не бывает — вопрос лишь в том, как эффективно разработчики их выявляют и закрывают. Наша ОС Astra Linux Special Edition здесь не исключение: мы постоянно прове...
В Челябинске проходят митапы системных администраторов Sysadminka, и на последнем из них я делал доклад о нашем решении для работы приложений на 1С-Битрикс в Kubernetes. Битрикс, Kubernetes, Сep...
Некоторое время назад мне довелось пройти больше десятка собеседований на позицию php-программиста (битрикс). К удивлению, требования в различных организациях отличаются совсем незначительно и...