Есть одна платежная система, на которой присутствовала уязвимость, позволяющая получить критически важную информацию о пользователе, его пароле, кредитной карте и тд. Баг очень легко воспроизводился, правда вывод средств со взломанных аккаунтов был затруднен по нескольких причинам, расскажу о них под катом.
Сайт компании 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:
Комментарии (12)
apro
28.07.2017 03:18+2и самый неприятный момент — компании, которые не верили в опасность проблемы, я пытался доказать им обратное, что дело обстоит серьезно, предлагал показать уязвимость на их тестовом аккаунте, говорили, что исправят, но до сих пор и не исправили
А их Visa/MasterCard не могут за это "нагнуть", т.е. что будет если пожаловаться на них в эти организации?
pyrk2142
28.07.2017 04:03+2Интересует похожий вопрос: в комментариях к старой статье о Приватбанка читал, что кто-то заставлял свой банк исправлять уязвимости, требуя это на основании законодательства (или договора с банком, не помню деталей). Есть ли какая-то адекватная возможность заставить компанию исправить уязвимость?
LoadRunner
28.07.2017 10:09Перестать пользоваться их услугами и уйти к конкуренту?
msts2017
28.07.2017 10:34Даже на западе для большинства населения это не работает лет 20, а у нас (СНГ) никогда не работало, в общем случае, если где-то и удается уйти, то в качестве исключения.
heartdevil
28.07.2017 12:00+1Что за несправедливость. Всего 100 долларов. Они готовы спонсировать футболистов миллиоными контрактами, а тут в любой момент могут потерять миллионы, им помогают, а они всего стольник.
pyrk2142
28.07.2017 14:33+2Расскажу одну байку: есть один чудесный сервис, созданный в СНГ (не буду говорить точно страну, чтобы было сложнее угадать). Не стесняется писать красивые фразы о своей надежности и безопасности. Берет с клиентов деньги за то, что даёт возможность работать с документами и другими крайне важными для предприятий вещами. При этом в нем есть пара критических дыр, которые позволяют получить доступ к аккаунту или ко всем документам. Владельцы компании не хотят выплачивать вознаграждение за уязвимости, поэтому я уже забыл про этот сервис (я никогда не требую вознаграждения. Нет — ладно, удачи, до свидания. И стираю всю информацию о багах со своего компа). В чем вопрос: многолетний труд десятков людей (а сотрудников много) зависит от 100$, которые руководство не готово выделить. Придёт человек с более низкой моралью, найдёт баг и выкачает все данные. И никто из адекватных клиентов не вернётся на сервис, с которого украли всю их важную информацию.
LanMaster
28.07.2017 20:07И никто из адекватных клиентов не вернётся на сервис, с которого украли всю их важную информацию.
Есть такая вещь как зарплатный проект, где подчас огромные и разветвлённые организации получают зарплату на сотни и тысячи сотрудников. Угадайте, интересуются бухгалтера или руководство перед тем, как заключать договор с банком, такими нюансами безопасности или отношением банка к заслугам искателей багов?
А есть ещё безнадёжный, мышекактусный монополизм, как в случае с Medoc.
MrRitm
05.08.2017 12:10-1Каждый раз читая подобные статьи хочется задать вопрос: Вот я решил например исследовать на предмет брешей в безопасности некий сервис. Мне для этого надо сначала как-то обеспечить свою анонимность? Т.е. не получится так, что при написании последнего абзаца репорта владельцу сервиса ко мне в дверь постучится товарищ майор с вопросом «А кто это тут у нас кибер-преступлениями балуется?». Ведь нельзя же исключать вероятности, что у исследуемого сервиса есть команда админов и некий софт (благо его много сейчас) который отслеживает аномальную активность и в случае чего тревогу начнут бить до того, как я что-то поломал. А далее все просто: заявление в органы, майор, допрос, обезъянник…
Только не кидайте тухлыми помидорами. Мне правда интересно, как организована работа исследователей безопасности!
И еще вопрос в догонку знатокам: Есть у меня сервер под виртуальный хостинг. Последние 3 года (тьфу-тьфу) полет нормальный. Попытки поломать есть, но безуспешные. Тем не менее всегда есть неприятное ощущение, что кто-то таки поломает мою прелесть (то самое чувство когда боишься монстров под кроватью). Поэтому я думаю, что должен сам попробовать «на зуб» то, что построил. А вот с чего начать — не знаю. Т.е. у меня все апдейты вовремя накатываются, ненужные порты закрыты, пароли адские. Как научиться ломать, чтобы проверять то, что построил?
romy4
Не так страшны эти частичные данные, как банальная беспечность пользователей и развод «на лоха».
Optimus_990
Согласен. Насчет развода, таков наш мир. Люди всегда ведутся.