Недавно решил проверить на уязвимости сайты платежных систем (ua,ru). Нашёл топ такого рода сервисов, на множестве из которых были обнаружены xss, csrf и другие популярные уязвимости. Были компании, которые оперативно устраняли уязвимости, благодарили и договаривались о сотрудничестве, были, которые молча фиксили, и самый неприятный момент — компании, которые не верили в опасность проблемы, я пытался доказать им обратное, что дело обстоит серьезно, предлагал показать уязвимость на их тестовом аккаунте, говорили, что исправят, но до сих пор и не исправили (maxkassa.ru).
Есть одна платежная система, на которой присутствовала уязвимость, позволяющая получить критически важную информацию о пользователе, его пароле, кредитной карте и тд. Баг очень легко воспроизводился, правда вывод средств со взломанных аккаунтов был затруднен по нескольких причинам, расскажу о них под катом.
Сайт компании https://www.plategka.com, это 7900 alexarank в Украине. Я обычно не трачу много времени на каждый сайт, потому что ещё не известно, как относится к уязвимостям на своём сайте владелец, возможно он проигнорирует уязвимость и моё время будет потрачено зря. Если нашёл первую стоящую уязвимость на сайте, то я её сразу репорчу, смотрю на реакцию владельца, и если он положительно относится к такого рода мероприятиям и хочет чтобы я сотрудничал с ним дальше, то продолжаю свои поиски.
Первое, что я сделал — это проверил поддомены и директории по моему словарю, поддомены были выявлены следующие
mail.plategka.com
test.plategka.com
, в целом брут ничего не дал.
Далее была просмотрена выдача по google доркам, увы, поиск не увенчался успехом, и единственное что было найдено — статья Gorodnya на Хабре о том, как он нашёл уязвимость на plategka https://habrahabr.ru/post/269663/, и о том как ему заплатили очень много денег — всего $8 :)
Следующим шагом было решено протестить функционал личного кабинета, csrf баги не удалось воспроизвести из-за подтверждения паролем для изменения данных, также стояли фильтры на xss.
Единственное, что было обнаружено – это self xss в подтверждении формы паролем, опасность такой баги минимальна, поэтому нужно было искать что-то другое и более серьезное.
Одна вещь, на которую я обратил внимание — это сервис pay2me. Его работа заключается в обработке данных о кредитных картах, я посчитал это интересным предметом для изучения.
Раньше натыкался на новости с этим сервисом https://ain.ua/2015/10/15/novyj-servis-po-priemu-platezhej-pay2me-ot-plategka, но не обращал на них особого внимания. Инструкция к созданию:
В личном кабинете есть соответствующая вкладка — «Настройки 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”:”u0418u043bu044cu044f”,”second_name”:”u0418u0433u043eu0440u0435u0432u0438u0447″,”last_name”:”u0412u044fu0437u043cu0435u043du0442u0438u043du043eu0432″,”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/, выдало только одну ссылку https://vk.com/thewayua?w=wall63064560_1589. Я знал, что ссылок должно быть намного больше, потому что сервис пользуется хорошей популярностью.
Последним шансом получить заветные ссылки стал брутфорс в интрудере, было загружено более 100 000 популярных английских слов и начат перебор.
Получилось найти около 40 ссылок, примерно половину паролей удалось узнать
Я зашёл на пару аккаунтов проверить, шифруются ли cvv2 и др данные карты.
На первом аккаунте обнаружил 3 действительных карты
На втором было 20
cvv в аккаунте скрыт, раскрывается информация только о 10 цифрах номера карты и срок её действия. Чтобы обналичить карты, можно, например, пополнить webmoney, или другой электронный кошелёк. Но для того, чтобы это сделать, придется ввести cvv2 код в подтверждении платежа, даже если карта была верифицирована.
Первое, что мы можем сделать – это ввести рандомный cvv2 код, например 111. Часто нас редиректит на ввод otp от банка, и тогда платёж не проходит из-за неверного cvv2.
Также можем забрутить cvv2, но потом опять можно столкнутся с вводом кода из банка, который тяжело обойти.
Если у нас будет дата и частичный номер карты, то обычная фишинг атака может заставить юзера рассказать о номере своей карты (мы получили email, номер телефона, ФИО, я даже смог получить несколько ссылок на страницы пользователей в соцсетях), даже обычное письмо вида: “Вы выиграли денежный приз, для его получения Вам необходимо прислать нам номер Вашей карты” может сработать, действие не требует предоставления критических конфиденциальных данных.
Чтобы подобрать cvv2, можно использовать какой-то онлайн магазин, всего 1000 запросов и мы подобрали код (вот статья об этом https://xakep.ru/2016/12/05/visa-brutforce/ ). Конечно, некоторые магазины делают редирект на ввод otp от банка, но многие “забугорные” магазины сразу списывают деньги без необходимости редиректа.
Уязвимость была зарепорчена почти сразу после брутфорса, в комплекте к данным по уязвимости прислал и базу пользователей, которые были оперативно заморожены, а сам баг был быстро устранен.
За уязвимость заплатили всего $100, сказали, что для того чтобы получить больше, я должен узнать все данные кредитной карты из аккаунта.
Хронология:
13.07 в 17:00 — отправлен репорт.
13.07 — уязвимость исправлена.
20.07 — выплачена награда $100.
24.07 — статья была согласована с тех поддержкой plategka.com.
Вывод из статьи: Не смотря на заявленное прохождение PCI DSS, я бы рекомендовал сайтам периодически проверять уязвимости, а клиентам — заводить виртуальные карты для использования в Интернет.
P.S: Если Вам нужен аудит безопасности, то пишите сюда.
Автор: w9w