[Из песочницы] Уязвимость в Platius: доступ в любой аккаунт

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

Оказалось, что «предоставлением» свободного доступа к аккаунтам своих пользователей.

aba42f9a5c9c4ca394fca300311554ec.png
После 5 минут гугла выяснилось:

  • их софт для оплаты счетов с помощью смартфона и для различных программ лояльности;
  • это все начали делать в iiko, где я когда-то был на интервью;
  • их в начале года купил Сбербанк;
  • у них 3,5 миллиона пользователей.


Поигрался с промокодом, ничего интересного не нашел. Решил посмотреть как происходит авторизация и регистрация. После ввода номера телефона просят ввести каптчу. За спиной уже был опыт автоматического прохождения некоторых каптч. В данном случае можно было даже не смотреть на внутренности реализации каптчи и не нужны даже тяжелые OCR алгоритмы. Цифры на изображение всегда:

  • на одном месте
  • одного цвета
  • их всегда 4


230776dc5bb54b8bb99843c8cfbf821e.png
Типичная каптча

То есть нам хватит проверки пары контрольных точек для прохождения каптчи. Вот и первое слабое место. Но как оказалось, каптчу можно даже и не проходить.

После проверки каптчи на указанный номер приходит SMS с паролем для входа в кабинет. Но судя по всему связка каптча-сессия не помечается пройденной, и мы можем присылать новые пароли на любой номер телефона в неограниченном количестве. Тем самым можно устроить атаку на модуль отсылки.

Подпись «Если смс не пришло, запросите пароль повторно. Это можно будет сделать через 10 минут» всего лишь фикция, не существует никаких временных ограничений для запроса нового пароля, как собственно и функционала для запроса его.

Переходим к вишенке на торте: к паролю для авторизации в кабинете. Пароль — это 4 десятичные цифры. Попробовал вбить пару невалидных — получил приглашение попробовать еще. Попробовал: ограничением на число попыток и не пахнет, как собственное и сроком жизни такого пароля. Быстренько накатал скрипт для «взлома» своего аккаунта:

seq --equal-width 0 9999 | 
parallel 2> /dev/null -j 0 --halt 2 -q bash -c "
header=\$(curl 'https://platius.ru/ru-RU/Login/PasswordStep' --data 'Login=%2B7xxxxxxxxxx&Password={}' -kis | tac | tac | head -n 1);
if [[ \$header == *\"302\"* ]]; then
  echo {};
  exit 1;
fi"


Эксперимент показал, что мой трехдневный пароль был все еще валиден для входа. Как вы можете догадаться, пароль не помечается использованным после успешной авторизации, что дает злоумышленнику возможность входы в любой кабинет, даже не тревожа владельца SMS.

Доступ в кабинет позволяет получить доступ к различным личным данным и возможно к оплате, которая проходит через привязываемую в кабинете банковскую карту. Я не рискнул тестировать данную часть, так как страшно привязывать свои кровные к таким ненадежным вещам.

56e2ae5b80e44b7cad350e3789364a5d.png
К этому всему можно получить доступ

Я первый раз шел на интервью с знанием о серьезных дырах в безопасности приложений — интересный опыт, я вам скажу. Волны адреналина сменяются периодами спокойствия. На интервью после ритуальных танцев с тестами и задачками (которые перешли в наследство от iiko), я рассказал о найденных уязвимостях. Правда, судя по всему, это не считается чем-то критичным, и заделывать дыры никто не спешит. Что огорчает.

Эпилог
По прошествии почти двух недель ничто не починено. Как выяснилось, багбаунти у них нет, и вообще все грустно. Непонятно, почему подзабивают на вещи, которые несут, на мой взгляд, колоссальные репутационные проблемы и возможные финансовые потери для клиентов.

Вопрос о поиске номеров телефонов с кабинетом в платиусе остается открытым, но уверен, что есть прямые или косвенные способы эти данные получить. Допустим, по профилям лайкающих группу Platius вконтакте. Также открыт вопрос о входе в мобильное приложение без предварительно отсылки SMS на номер атакуемого. Задача скорее всего сведется в подмене локальных хранилищ приложения. Так что исследователям есть где развернуться.

© Habrahabr.ru