По секрету всему свету, или как Raiffeisen гоняет (не) твои паспортные данные по сети тысячи раз

Предыстория

Одной унылой ночью мне стало скучно разгребать БИНы российских банков, отчего я решил сделать дублирование операций из своего ныне основного банка в телеграм. Тем более, что качество уведомлений оставляет желать лучшего (или это просто я избалован лучшим мобильным приложением от одного там небанка)

Отрицание. Что делают хоть немного люди, когда хотят попользоваться непубличным API? Наверное, идут на GitHub и вводят в строку поиска что-то типа «api service_name». Много что уже заревёр (с/ш)ено, посему велик шанс найти полноценный враппер. Но нет, обнаруживаю только всяку каку с хакатонов.

Гнев. DuckDuckGo’инг тоже не даёт результатов. Неужели никто не пытался автоматизировать работу с Райфом?

Торг. Открываю веб-банк и смотрю через монитор сети (ctrl+shift+e в лисе), куда шлются запросы после каких-либо действий. Ага. Ищу по доменам на гитхабе. Опять ничего. ВАААУ. Уже становится страшно.

Депрессия. Расковырял APK’шку и судорожно ищу по всем файлам наличие «raiffeisen.ru», однако kFind ничего сверхъестественно-полезного не выдаёт. Как и по запросу «api».

Смирение. Достаю свой прошлый телефончик с Android 8.1 на борту, ставлю купленный несколько лет назад для решения похожей задачи с одним там небанком HttpCanary — шикарный клиент для анализа http (s), tcp, udp и web-socket трафиков. Ставлю доверенный сертификат, ля-ля-ля тополя, бюрократия, в общем. Теперь активирую self-vpn и запускаю заветный Raiffeisen.

Принятие. В PiP-окошко с логом всех http-запросов летит первый мусор на всякие уведомления. Прикладываю палец к сканеру, дабы войти в приложение. Ага. Вижу запрос, содержащий «oauth/token». Чую, что что-то связанное с авторизацией. Пускает в приложение. Но вот незадача, никакие данные не отобржаются, типа баланса счетов или истории операций. Окей, смею в тот момент предположить, что это как-то связано с доверенным сертификатом. Тыкаю в раздел операций. Тоже не отображаются данные, но запрос ушёл успешно. Можно отключать анализ и идти разгребать урылы, заголовки и содержимое.

Основная часть

Ответ на запрос списка операций приходит корректный. И покупка в PYATEROCHKA, и покупка во ВкусВилле. Значит запрос был правильный, это приложение строило из себя не пойми что. Вижу ещё, что авторизация происходит по временному токену, что вполне очевидно.

Без задней мысли открываю тот самый oauth/token запрос. И что я вижу? При авторизации через палец, они передают мой пароль от банка в сыром виде, вот прям в чём генератор паролей родил. Причём забавно, они не разрешат ставить пароли длиннее, чем md5. Окееееееееееей.

image-loader.svg

Открываю ответ на этот запрос и вижу… Все свои паспортные данные с основного разворота. Да, при каждой авторизации, будь то пароль, код, палец или лицо — сервер будет отдавать всю эту простыню вновь и вновь. Что интересно, приложение эти данные потом нигде не отображает, и ни в каких запросах не использует, хоть и по поводу последнего нельзя говорить строго, ибо я не мог пройтись по всем-всем-всем запросам приложения.

image-loader.svg

Мораль

Видно, что Raiffeisen глубоко плевать хотели на клиентов в незащищённых ситуациях. Да, я на телефоне имею root-права, что считаю вполне нормальным для любой unix-подобной системы, и да, я поставил сертификаты ручками. Но это не отменяет факта неоправданной передачи тех данных, которые лучше не передавать лишний раз.

P.S.

А ещё они загружают список всех валют. В том числе ямайский доллар. Зачем, а главное…

© Habrahabr.ru