Заказать
Все кейсы
Кейс 06 / 08CRITICAL · CVSS 9.1
Платёжный сервис фиат-крипто

Выплата денег магазина на чужие реквизиты

Вывод денег был защищён так же, как чтение настроек.

Заказчик: · NDA

  • Второй факторнет
  • Проверка реквизитовнет
  • Ущербне допущен
77 000 €на балансе тестового магазина
Баланс магазина
Доступно к выводуБаланс доступен
77 000 €
На стенде деньги остановила только сеть
Выплата на счёт магазинаисполнена
Выплата на чужой IBANпередана провайдеру
После исправления: второй фактор и проверка реквизитов
01

О продукте

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

02

Где была ошибка

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

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

03

Чем это грозило

  • Прямая потеря денег магазинов
  • Под угрозой магазины с ненулевым балансом и ключом без проверки подписи
  • Без участия жертвы
04

Как доказали

На тестовой среде выбрали магазин с балансом около 77 000 EUR и ключом без проверки подписи. Анонимный запрос создал выплату на тестовые реквизиты. Сервер записал расходную операцию и направил её в интеграцию с настоящим провайдером.

Выплату остановила только сеть тестового стенда: доступа к боевому провайдеру там не было. На боевой среде работал тот же код и был доступ к провайдеру. Там такой запрос мог привести к реальной выплате. Реальные средства мы не переводили.

05

Как исправили

Чтение и вывод денег — одна защита

  • Ключ без проверки подписи открывал операции выплат
  • Выплата создавалась без подтверждения владельцем
  • Получатель полностью задавался в теле запроса
  • Новые реквизиты не требовали дополнительного контроля

Вывод денег — отдельный уровень доверия

  • Для каждой выплаты обязательна подпись запроса
  • Добавили второй фактор или подтверждение человеком
  • Проверяется владение реквизитами; для магазина действует список разрешённых получателей
  • Настроили оповещения о новых реквизитах и необычных объёмах выплат
Урок

Деньгам нужна защита сильнее, чем данным.

Исправлено
Заявка

Проверим ваш продукт до того, как это сделает кто-то другой

Опишите продукт в двух словах. Ответим в течение рабочего дня и предложим формат: чёрный или белый ящик.

  • Договор и NDA до начала работ
  • Отчёт для бизнеса и для разработчиков
  • Повторная проверка после исправления