При входе в личные кабинеты различных сервисов в целях безопасности часто используется 2FA — помимо логина и пароля необходимо ввести одноразовый код. Но, как оказалось, не все так надежно даже при двухфакторной аутентификации — за последний год я нашел три (!) сервиса, где можно было просмотреть одноразовый код входа, который отправляется клиенту по СМС.
в самом запросе.
Ниже приводится краткое описание того, что это означает, на конкретных примерах.
1. Популярная сеть АЗС, более 500 000 зарегистрированных клиентов.
Запрос при входе в веб-версию личного кабинета:
POST https://someazs.ua/ua/profile/auth/ Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: ru,en-US;q=0.9,en;q=0.8,uk;q=0.7 Connection: keep-alive Content-Length: 408 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=6n3l2o90hfb020u9ag020u8ha1; usersomeazs_popupcoupons=1;.
Host: someazs.ua Origin: https://someazs.ua Referer: https://someazs.ua/ua/login/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 X-Compress: null X-Requested-With: XMLHttpRequest data[phone_mask]: 951234567 data[phone]: 0951234567
Отвечать:
{"Status":0,"Code":"7038","status":true,"step2":true}
Код из СМС — 7038 — просто виден в ответе сервера.
То есть на сайте при входе в личный кабинет в ответе был одноразовый код входа, который отправляется клиенту по СМС - можно было зайти в чужой аккаунт, указав только номер телефона клиента - и посмотреть OTP в самом запросе.
В личном кабинете доступны: номер карты лояльности, ФИО, балансы (бонус в гривне, литре, кофе), история транзакций, в настройках - дата рождения, e-mail клиента и т.д.
С помощью дальнейших нетехнических действий (например, обзвона клиентов), при должном везении, можно будет использовать клиентские деньги/литры/кофе.
Почему я пишу «если повезет»? Когда я рассказал о проблеме, мне сообщили, что расчеты с чужими бонусами не так-то просто произвести, даже если у вас есть доступ к своему аккаунту, так как есть дополнительные проверки.
Тем не менее… Ошибку быстро исправили и поблагодарили.
2. Сеть социальных магазинов (аналогично Фиксированная цена ), мобильное приложение (более 100 тысяч скачиваний)
Отслеживая запросы через Fiddler, я заметил следующее.
При входе в мобильное приложение после ввода номера телефона и карты лояльности клиенту отправляется одноразовый код.
Проблема в том, что это делает запрос GET типа: https://bulk.somesmssender.com/Эsending_method=sms&from=someretailes&user=onviber4821&txt=%D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&phone=380987654321&sign=42f66957a03090eb90556b0ef7fed2e1
Прямо в этом запросе виден сам одноразовый код: текст отправленного СМС %D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&
Простой отчет о конвертации: Код+подтверждение:+1234.
Те.
В самом приложении вы можете увидеть, какой код будет отправлен.
Здесь также можно заходить в чужие аккаунты, без второго фактора.
По определенным причинам клиенты этой сети наименее защищены от мошенничества, поэтому я много раз пытался передать информацию в компанию.
Я трижды писал в августе на адрес, который был указан на странице приложения в Плей Маркете - не получил ни одного ответа, даже автоматического.
Позже я написал в компанию, чьей службой SMS-сообщений они пользуются.
Мне сказали, что мне необходимо связаться с владельцем мобильного приложения, так как они не могут со своей стороны повлиять на разработку и передачу информации в эту компанию.
Это правда, но я предполагал, что служба обмена сообщениями может повлиять на них как на партнера/клиента.
Кроме того, причина, по которой я написал в почтовую службу, заключается в том, что указанный мною GET-запрос является их разработкой, и такая же ситуация с большой долей вероятности может произойти и с другими их клиентами.
Я предположил, что сервису было бы целесообразно подправить логику рассылки - не передавать в запросе и номера телефонов клиентов, и одноразовый код - но мне не ответили.
Немного о том, как еще я пытался донести проблему Потом на сайте магазина написал на контактный адрес электронной почты, подождал - и снова ничего.
Но так как я упрямый, то нашел на этом же сайте все возможные контакты (и общие ящики, и личные адреса) и написал им - как вы понимаете, тоже никто не ответил.
Поэтому позже я обратился в чат и прямо в чате задал вопрос, получили ли они мои письма.
Сначала ответили, что не видели, потом нашли и пообещали, что сдадут. Интересно, что помимо отсутствия ответа на письмо, отправленное на основной адрес приложения, после общения в чате мне приходили письма.
В одном из них я видел, как меня ввели в систему: «Умник»
Так себе отношение к клиенту.
Последний раз, когда я проверял, исправления от Аврора не было.
Со стороны почтовой службы исправлений также не было, но здесь ситуация серьезнее, поэтому название службы прямо не указываю.
3. Мобильное приложение для хранения дисконтных карт и осуществления мобильных платежей (более 130 тыс.
клиентов)
При входе вам нужно только ввести свой адрес электронной почты и код. При этом выполняется следующий запрос: POST http://api.somewallet.com/mobileclient.svc/getRegistrationCode HTTP/1.1
Content-Type: application/json; charset=UTF-8
Content-Length: 100
Host: api.somewallet.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.12.3
{"request":{"Culture":"ru_RU","DeviceIdentifier":"4514825570005447","Identifier":"some@email"}}
Вот ответ: {"GetRegistrationCodeResult":{"ErrorMessage":{"Code":0,"LogReferenceId":0,"Message":"SUCCESS"},"Data":{"Code":"044912"}}}
Здесь в ответе также можно увидеть код, который необходимо ввести (044912).
После входа в систему мне были доступны следующие функции:
- просмотр карт лояльности и бонусов по ним,
- купоны для определенных магазинов,
- контактная информация о клиенте (номера телефонов и адрес электронной почты, дата рождения и ФИО),
- установка, изменение и удаление 4-значного кода доступа,
- просмотр платежных карт,
- получение платежного токена (аналог токена из моей предыдущей статьи) Как ездить в такси за чужой счет ).
Проблема идентична двум другим.
На мое сообщение ответили, исправили уязвимость и поблагодарили материально.
Можно сказать, что иногда в сервисах можно обойти двухфакторную аутентификацию, просто просмотрев запросы на авторизацию.
И этому подвержены как веб-сайты, так и мобильные приложения.
Так что в следующий раз, когда вы будете разрабатывать или тестировать сервисы, имеющие личный кабинет, обратите на это внимание.
Теги: #информационная безопасность #платежные системы #Тестирование веб-сервисов #Тестирование мобильных приложений #уязвимости #торговля #двухфакторная аутентификация
-
Я. Субботник Едет В Челябинск
19 Oct, 24 -
Как Я Научился Программировать После 30
19 Oct, 24 -
Используем Php Правильно
19 Oct, 24 -
Рефлог Github V1.5.16
19 Oct, 24