Выплата денег магазина на чужие реквизиты
Вывод денег был защищён так же, как чтение настроек.
Заказчик: · NDA
- Второй факторнет
- Проверка реквизитовнет
- Ущербне допущен
О продукте
Платформа хранила выручку магазинов на внутренних фиатных балансах. Магазин создавал заказ выплаты, а внешний провайдер переводил деньги на банковский счёт или по номеру телефона.
Где была ошибка
Уязвимость продолжала предыдущий кейс: публичный идентификатор ключа давал доступ не только к данным, но и к выплатам. API принимал IBAN или номер телефона получателя прямо из тела запроса.
Сервер не проверял владение реквизитами и не требовал второго фактора или подтверждения человеком. Запрос от имени магазина сразу становился расходной операцией и направлялся провайдеру. Получателя мог выбрать любой, кто знал публичный идентификатор.
Чем это грозило
- Прямая потеря денег магазинов
- Под угрозой магазины с ненулевым балансом и ключом без проверки подписи
- Без участия жертвы
Как доказали
На тестовой среде выбрали магазин с балансом около 77 000 EUR и ключом без проверки подписи. Анонимный запрос создал выплату на тестовые реквизиты. Сервер записал расходную операцию и направил её в интеграцию с настоящим провайдером.
Выплату остановила только сеть тестового стенда: доступа к боевому провайдеру там не было. На боевой среде работал тот же код и был доступ к провайдеру. Там такой запрос мог привести к реальной выплате. Реальные средства мы не переводили.
Как исправили
Деньгам нужна защита сильнее, чем данным.
Исправлено