Началось все с того, что в один прекрасный вечер я решил попробовать промониторить запросы в различных приложениях установленных в моем айфоне. Скачал бесплатный http-cather, настроил сертификаты и начал перехватывать запросы. Большинство приложений сразу же «отвалились» в самом начале из-за сомнительного рода трафика (Альфа-Банк, OZON, ГосУслуги) , но вот клиент Йоты запустился без проблем.
В нем, как оказалось, не так уж много действий, которые могли бы инициировать запросы API. И еще меньше запросов, которые несли в своем теле персональную информацию о пользователе (имеется в виду номер телефона/uuid, а не cookies). Мое внимание сразу же упало на GET-запрос /sales/profile?phone=[номер]. Данный запрос возвратил мне пустой массив orders (что было логично, так как я до этого ничего не заказывал). Самая первая мысль, которая возникла у меня: «А что если попробовать подставить другой номер?». Поменял одну цифру в своем номере и запросил информацию о заказах еще раз. Ответ был аналогичным — пустой массив orders.
Перебирать номера вручную было бы глупо, а писать для этого скрипт было лень. Единственное, что мне пришло в голову на тот момент, то это попробовать ввести самый «эксклюзивный» номер — 9999999999. Я ввожу его и о чудо! В ответ мне приходит JSON-объект с десятками заказов, оформленных на данный номер телефона. Полей было достаточно: name, type (доставка курьером или до пункта выдачи) , id (идентификатор для отмены заказа через техническую поддержку) , status (новый или отменен) , orderPickupPoint (информация о пункте выдачи, включая адрес, координаты и график работы) , items (тип симкарты, цена и так далее) , orderCreatedDate (дата создания заказа) .
Но что-то все-равно не сходилось и я не мог понять, почему такой большой территориальный разброс по адресам доставки для одного номера: Москва, Чита, Санкт-Петербург, Самара, Махачкала. Я начал искать другие способы заказа SIM-карты (помимо мобильного приложения) и наткнулся на официальный сайт оператора. Но тут меня ожидал еще больший сюрприз. Оказывается, для подтверждения заказа по определенному номеру достаточно ввести каптчу без ввода кода из SMS (кнопка «Подтвердить иначе») . Что-то мне подсказывает, что люди просто боятся «палить» личный номер телефона и вместо него вводят 9999999999. Иначе я не могу объяснить десятки заказов, которые оформлены на него.
Таким образом, помимо того, что мы можем запросить информацию о заказах абсолютно по любому номеру телефона (и не обязательно, чтобы клиент был абонентом Yota) , так мы еще можем «оформить» на него заказ. Фича это или баг, решать не мне.
Я сразу же описал ситуацию технической поддержке и они мне посоветовали обратиться в ИБ-отдел по адресу isec@yotateam. com. Я составил грамотное письмо, описав все шаги воспроизведения, прикрепил скриншоты запросов, файлы ответов и отправил им на почту. После трех дней «молчания» я переслал письмо press@yotateam. com (единственная почта, которую я нашел на официальном сайте). Но вот уже пошла третья неделя, баг (если это можно так назвать) все еще воспроизводится. Причем, никакой обратной связи со стороны специалистов йоты я не получал.