Pull to refresh

Как уязвимость платежной системы раскрывала данные кредитных карт

Information Security *Website development *IT systems testing *Payment systems *Web services testing *
Недавно решил проверить на уязвимости сайты платежных систем (ua,ru). Нашёл топ такого рода сервисов, на множестве из которых были обнаружены xss, csrf и другие популярные уязвимости. Были компании, которые оперативно устраняли уязвимости, благодарили и договаривались о сотрудничестве, были, которые молча фиксили, и самый неприятный момент — компании, которые не верили в опасность проблемы, я пытался доказать им обратное, что дело обстоит серьезно, предлагал показать уязвимость на их тестовом аккаунте, говорили, что исправят, но до сих пор и не исправили.

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

Сайт компании https://www.plategka.com, это 7900 alexarank в Украине. Я обычно не трачу много времени на каждый сайт, потому что ещё не известно, как относится к уязвимостям на своём сайте владелец, возможно он проигнорирует уязвимость и моё время будет потрачено зря. Если нашёл первую стоящую уязвимость на сайте, то я её сразу репорчу, смотрю на реакцию владельца, и если он положительно относится к такого рода мероприятиям и хочет чтобы я сотрудничал с ним дальше, то продолжаю свои поиски.

Первое, что я сделал — это проверил поддомены и директории по моему словарю, поддомены были выявлены следующие

mail.plategka.com
test.plategka.com


, в целом брут ничего не дал.
Далее была просмотрена выдача по google доркам, увы, поиск не увенчался успехом, и единственное что было найдено — статья Gorodnya на Хабре о том, как он нашёл уязвимость на plategka , и о том как ему заплатили очень много денег — всего $8.

Следующим шагом было решено протестить функционал личного кабинета, csrf баги не удалось воспроизвести из-за подтверждения паролем для изменения данных, также стояли фильтры на xss.

Единственное, что было обнаружено – это self xss в подтверждении формы паролем, опасность такой баги минимальна, поэтому нужно было искать что-то другое и более серьезное.



Одна вещь, на которую я обратил внимание — это сервис pay2me. Его работа заключается в обработке данных о кредитных картах, я посчитал это интересным предметом для изучения.
Раньше натыкался на новости с этим сервисом, но не обращал на них особого внимания. Инструкция к созданию:

В личном кабинете есть соответствующая вкладка — «Настройки Pay2me». Для создания уникальной ссылки необходимо ввести ее название, 16-значный номер карты и нажать клавишу «Добавить».

Я создал свою ссылку https://www.plategka.com/gateway/pay2me/qwqwqw/.


Данные о карте были скрыты, xss уязвимости отсутствовали. Внимание привлек ответ бурпа. В исходном коде страницы с оплатой в javascript выдавался логин юзера, md5 хэш его пароля, ФИО, email и номер телефона:

{“user_id”:”dd660731660eb4bba1f62e44e7″,”user_role_id”:null,”org_id”:null,”merchant_id”:null,”partner_id”:null,”login”:”berest****”,”passwd”:”f1957496d2f5c7cb3caa73c2e*******”,”first_name”:”\u0418\u043b\u044c\u044f”,”second_name”:”\u0418\u0433\u043e\u0440\u0435\u0432\u0438\u0447″,”last_name”:”\u0412\u044f\u0437\u043c\u0435\u043d\u0442\u0438\u043d\u043e\u0432″,”email”:”berest****@ya.ru”,”phone”:”+38097360″,”key_private”:”inNFD\/aJyC2\/KWsuQ9vAs9FGg6\/\/4YnGjQuHUX7tu0i5GMY7weB3EddH815ytvkaUfS8F0KuxWMgAzDBAKv+Rv6Uzqgtn6qMaHH8N6v5KFWFeeRncGQ6XPQwo4kboNJIf8jidlFj\/Xi8+5BqRM\/cUfDt+P3ODaql5dImLehS36jzBwsQq6NjKZFYVkwhZ1mKbcu4H832JA32mHaHmTLlb\/HAocxg6ws1EDKRyJoNL3S8P”,”key_public”:”/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/+6MXVFgAmowKck8C+Bqoofy6+A2Qx6lREFBM8ENpCZGo6QAkjv2uYcw+JwXzBglqyomyBGp6kCR3G4KwWuFNQG+dNGA+uRC3wCvbHyPPRZKpuNIwM3AFGXdWWs3yZok32NbMkFRRcFa3raJ1QFlk1usJ6D3tnGiSrPL4NM+kB\/S6ezQHZzepScfD”,”secret”:”d7ceeb0a873ad2d29de12c45b******”,”secret_key”:null,”date_created”:”2017-05-11″}

(это данные, взятые из url https://www.plategka.com/gateway/pay2me/ilia/ ).



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

Были попытки их нахождения с помощью дорков вида site:plategka.com inurl:pay2me/, выдало только одну ссылку. Я знал, что ссылок должно быть намного больше, потому что сервис пользуется хорошей популярностью.

Последним шансом получить заветные ссылки стал брутфорс в интрудере, было загружено более 100 000 популярных английских слов и начат перебор.



Получилось найти около 40 ссылок, примерно половину паролей удалось узнать



Я зашёл на пару аккаунтов проверить, шифруются ли cvv2 и др данные карты.

На первом аккаунте обнаружил 3 действительных карты:



На втором было 20:



cvv в аккаунте скрыт, раскрывается информация только о 10 цифрах номера карты и срок её действия. Чтобы обналичить карты, можно, например, пополнить webmoney, или другой электронный кошелёк. Но для того, чтобы это сделать, придется ввести cvv2 код в подтверждении платежа, даже если карта была верифицирована.

Первое, что мы можем сделать – это ввести рандомный cvv2 код, например 111. Часто нас редиректит на ввод otp от банка, и тогда платёж не проходит из-за неверного cvv2.



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

Если у нас будет дата и частичный номер карты, то обычная фишинг атака может заставить юзера рассказать о номере своей карты (мы получили email, номер телефона, ФИО, я даже смог получить несколько ссылок на страницы пользователей в соцсетях), даже обычное письмо вида: “Вы выиграли денежный приз, для его получения Вам необходимо прислать нам номер Вашей карты” может сработать, действие не требует предоставления критических конфиденциальных данных.

Чтобы подобрать cvv2, можно использовать какой-то онлайн магазин, всего 1000 запросов и мы подобрали код (вот статья об этом). Конечно, некоторые магазины делают редирект на ввод otp от банка, но многие “забугорные” магазины сразу списывают деньги без необходимости редиректа.

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

За уязвимость заплатили всего $100, сказали, что для того чтобы получить больше, я должен узнать все данные кредитной карты из аккаунта.

Хронология:

13.07 в 17:00 — отправлен репорт.
13.07 — уязвимость исправлена.
20.07 — выплачена награда $100.
24.07 — статья была согласована с тех поддержкой plategka.com.

Вывод из статьи: Не смотря на заявленное прохождение PCI DSS, я бы рекомендовал сайтам периодически проверять уязвимости, а клиентам — заводить виртуальные карты для использования в Интернет.

P.S: Если Вам нужен аудит безопасности, то пишите сюда. Также, если Вас интересует мониторинг новых статей, можете подписаться на vk/twitter/telegram, ссылки внизу.

Предыдущая статья.
Tags:
Hubs:
Total votes 25: ↑25 and ↓0 +25
Views 20K
Comments Comments 13