Доступ к магазину по одной публичной строке
У почти всех ключей магазинов проверку подписи выключили — «чтобы не мешала».
Заказчик: · NDA
- Доступанонимно
- Затронутыпочти все магазины
- Барьерпубличная строка
О продукте
Платформа процессинга платежей между фиатом и криптовалютой. Магазины встраивали платёжный виджет и через API создавали заказы, читали настройки и историю операций. Запрос должен был содержать публичный идентификатор ключа, одноразовое число nonce и HMAC-подпись.
Где была ошибка
Флаг в настройках ключа отключал проверку подписи и nonce. Поддержка использовала его для упрощения интеграций. В таком режиме публичный идентификатор становился единственным условием доступа; около 95 % боевых ключей работали именно так.
Идентификаторы были видны в JavaScript-коде платёжного виджета. Секретный ключ для обращения к API уже не требовался. Разные ответы на известные и неизвестные идентификаторы помогали находить рабочие значения, а ограничение частоты запросов было выключено.
Чем это грозило
- Действия от имени почти любого магазина
- Утечка настроек, заказов и данных плательщиков
- Основа для вывода денег (следующий кейс)
Как доказали
Запрос без подписи с идентификатором из публичного виджета создал заказ в боевой базе. Заказ пометили как тестовый; он истёк без оплаты. На тестовой среде тот же способ открыл список заказов и настройки магазина.
Заказчик отключил самый доступный ключ в день находки. Для устранения всей проблемы требовалось убрать саму возможность обхода подписи.
Как исправили
Флаг, который выключает проверку, — скрытый вход с панелью управления.
Исправлено