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

Доступ к магазину по одной публичной строке

У почти всех ключей магазинов проверку подписи выключили — «чтобы не мешала».

Заказчик: · NDA

  • Доступанонимно
  • Затронутыпочти все магазины
  • Барьерпубличная строка
95 %ключей магазинов работали без проверки подписи
API магазина
Ключи без проверки подписиДоступ: магазин
0 %
Ключ виден в коде страницы оплаты
Запрос магазина с подписью200
Запрос без подписи, из интернета200 OK
После исправления: без подписи — 401
01

О продукте

Платформа процессинга платежей между фиатом и криптовалютой. Магазины встраивали платёжный виджет и через API создавали заказы, читали настройки и историю операций. Запрос должен был содержать публичный идентификатор ключа, одноразовое число nonce и HMAC-подпись.

02

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

Флаг в настройках ключа отключал проверку подписи и nonce. Поддержка использовала его для упрощения интеграций. В таком режиме публичный идентификатор становился единственным условием доступа; около 95 % боевых ключей работали именно так.

Идентификаторы были видны в JavaScript-коде платёжного виджета. Секретный ключ для обращения к API уже не требовался. Разные ответы на известные и неизвестные идентификаторы помогали находить рабочие значения, а ограничение частоты запросов было выключено.

03

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

  • Действия от имени почти любого магазина
  • Утечка настроек, заказов и данных плательщиков
  • Основа для вывода денег (следующий кейс)
04

Как доказали

Запрос без подписи с идентификатором из публичного виджета создал заказ в боевой базе. Заказ пометили как тестовый; он истёк без оплаты. На тестовой среде тот же способ открыл список заказов и настройки магазина.

Заказчик отключил самый доступный ключ в день находки. Для устранения всей проблемы требовалось убрать саму возможность обхода подписи.

05

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

Подпись можно выключить флагом

  • Флаг превращал публичный идентификатор в пропуск к API
  • Ключи с отключённой проверкой оставались действующими
  • Ответы API помогали подбирать идентификаторы без лимита запросов
  • Запросы без подписи не вызывали оповещений

Подпись обязательна всегда

  • Флаг обхода удалили; HMAC-подпись обязательна для каждого ключа
  • Секреты и идентификаторы таких ключей сменили
  • Убрали публичную проверку идентификаторов и ограничили частоту запросов
  • Настроили оповещения о попытках доступа без подписи
Урок

Флаг, который выключает проверку, — скрытый вход с панелью управления.

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

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

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

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