2.415.604 руб. за взлом Ситимобил
История о том, как я стал «таксистом» и заработал 2.415.604 руб
Всем салют, дорогие друзья! На связи Golden - глава Hacker Place
В сегодняшней статье я бы хотел рассказать вам о своем опыте взлома компании Ситимобил в рамках их программы Bug Bounty.
Введение
В 2022 году, с появлением автоматизированных сканеров уязвимостей становится все меньше смысла искать простые уязвимости в публичных сервисах.
Сканер уязвимостей — программа для сканирования информационной инфраструктуры в реальном времени. Главная задача сканера — оценить безопасность и найти уязвимость, если таковая имеется.
Если вы желаете найти что-то крупное, то стоит постараться проникнуть вглубь. Например, в служебные сервисы, которые доступны ограниченному кругу лиц (но не обязательно только из локальной сети.)
Как-то раз мне пришла в голову мысль исследовать партнерский портал Ситимобил и, конечно же, попробовать заработать на этом.
Через служебный портал Ситимобил добавляют в систему машины, регистрируют водителей, берут с них комиссию, выводят деньги и т.д. С учетом того, что у компании открыта программа баг-баунти, — это очень заманчивая цель.
Прежде всего нужно было попасть в аккаунт. Существовалотри способа это сделать:
- Пойти в налоговую, зарегистрироваться, как ИП и подать официальную заявку на подключение к Ситимобил. Это гарантированный способ получить аккаунт в системе, но самый нудный, сложный и не анонимный.
- Попытаться обойти авторизацию, но без гарантий на успех.
- Найти человека, который уже зарегистрирован в системе и попробовать договориться, чтобы мне дали аккаунт менеджера.
В итоге было решено пойти по пути наименьшего сопротивления и начать с варианта под номером три.
Поиск в открытых источниках
На этом этапе пригодились Яндекс.Коллекции.
Так называется сервис для хранения избранного: картинок, видео или ссылок. Он встроен в Яндекс.Браузер.
Там можно собирать публичные коллекции, и многие пользователи намеренно или случайно сохраняют в открытом доступе личные вкладки. С помощью таких dork’ов можно найти много интересного. Например, несколько человек, которые хранят в коллекциях ссылки на партнерские сайты Ситимобил.
Один из них вел какой-то партнерский блог. Я уже собирался написать ему, но решил для начала присмотрелся повнимательнее.
Блог не был опубликован, но на GitHub нашлись исходники, а в них - ссылки на Google Диск, где в открытом доступе лежали инструкции, которые Ситимобил написал для партнеров.
Так же присутствовала документация к личному кабинету: обзор интерфейса и функций портала, инструкции — ничего особенного. Там было и пошаговое руководство созданию нового пользователя. По-сути оно было бесполезно без инвайта, если бы не одно НО: на одном из скриншотов были замечены поля «логин» и «пароль», заполненные открытым текстом.
В итоге логин и пароль подошли! Именно так, спустя неделю поисков у меня появился доступ к активному демо-аккаунту и отправная точка для продолжения исследований.
Изучаем внутрянку
Поначалу я находил только мелкие, незначительные баги. Был момент, когда казалось, что я нашел способ выводить деньги с чужих партнерок на любой банковский счет, но оказалось, что Ситимобил проверяет каждую транзакцию.
Больше двух недель возни с Burp Suite без заметных результатов. И вот я вновь зашел на страницу с «моими» водителями и увидел ошибку: «у вас нет доступа».
Нет, аккаунт не заблокировали. Похоже, в тот день шли какие-то технические работы и у учетки отозвали все доступы. Пришлось перебирать известные адреса страниц в надежде, что одна из них будет доступна. Мне повезло, открылась страница с ранней версией этой партнерки. У нее отличался не только дизайн, но и endpoint. Если у всех страниц был /taxiserv/page
, то здесь /taxiserv/new/anketa
.
Раньше я видел на этой странице только «своих» таксистов, но теперь там появился длинный перечень таксопарков и профили водителей, которые зарегистрированы в этом таксопарке.
При помощи чужого идентификатора и еще одного бага, IDOR — небезопасной прямой ссылки, я подключил к демоаккаунту реального менеджера и таким образом получил его привилегии. После это прямо мне в руки вывалились карточки с информацией о таксистах (скрины паспорта и водительского удостоверения).
Теперь я мог просматривать и редактировать информацию о водителях, всего больше 400 тысяч анкет:
Судя по числу записей, это могли быть не только действующие водители, но и все те, кто регистрировался в системе за последние годы.
Чуть позже я нашел в полях интерфейса демонстрационного аккаунта пару мест для инъекций: time blind SQL-injection и error based SQL-injection.
Ничего нестандартного не было, это были обычные SQLi инъекций - параметр с инъекцией был внутри json запроса.
Обратите внимание на тайминг. Да, это уже не такой зрелищный способ получить данные, но зато с его помощью можно вытащить все содержимое базы данных.
Однако, в рамках BugBounty мы баги не эксплуатируем, поскольку это запрещено. На данном этапе составляется отчет о найденной и отправляется в компанию. После получения подтверждения наличия бага компания перечисляет вознаграждение на наш счет.
Резюмируя
В ходе тестирования ни один таксист не пострадал.
У этой истории есть мораль: не стоит забывать про безопасность внутренних сервисов. То, что к ним имеют доступ только сотрудники и деловые партнеры, не значит, что туда не проникнут злодеи.
Что касается вознаграждения:
Итого вышло ровно $40.000. В пересчете на рубли: 2.415.604 руб.
На этом у меня все. Очень надеюсь, что данный отчет натолкнет вас на правильные мысли. Желаю удачной охоты!