Заказать
Все кейсы
Кейс 04 / 08HIGH · CVSS 7.1
Крипто-приложение · обмен без комиссии (EVM)

Бюджет на комиссии можно было сжечь бесплатно

Сервис платил сети раньше, чем проверял заявку. Даже отклонённая заявка стоила ему денег.

Заказчик: · NDA

  • Прямая кражанет, проверено
  • Ущерббюджет и отказ в работе
  • Лимитыне было
0 ₽стоила злоумышленнику каждая заявка
Газовый кошелёк сервиса
Баланс на комиссииОбмен работает
0,48 ETH
Каждая заявка бесплатна для злоумышленника
Комиссия за обмен клиента−0,0002 ETH
6 мусорных заявок отклонены сетью−0,45 ETH
Обмен без комиссии отключёндля всех
После исправления: проверка до оплаты
01

О продукте

В Ethereum сервис оплачивал газ для обмена через делегирование EIP-7702. Сервер сам собирал вызовы контракта, клиент подтверждал их подписью. Проверка контракта и сборки вызовов не выявила пути прямого вывода средств.

02

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

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

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

03

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

  • Расход газового бюджета сервиса
  • Отключение функции для всех пользователей
  • Рост ущерба в сотни раз при дорогой сети

Забрать деньги себе злоумышленник не мог: комиссия уходит сети.

04

Как доказали

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

Транзакции не отправляли. Риск оценили по комиссиям сети на момент аудита; фактический расход зависит от выполнения, а не только от лимита газа.

05

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

Комиссия списывается до проверки

  • До отправки подпись и адрес авторизации не проверялись
  • Каждая транзакция получала фиксированный лимит газа
  • Бесплатные заявки можно было создавать без ограничений
  • Рост числа отклонённых транзакций не вызывал оповещений

Проверка до любых расходов

  • Сервер проверяет подпись, структуру и адрес авторизации до отправки
  • Расход газа оценивается до отправки и ограничивается
  • Ввели лимиты заявок на аккаунт и на день
  • Настроили оповещение о доле отклонённых транзакций
Урок

Если операция стоит денег, проверяйте вход до оплаты. Бюджетная атака — тоже атака.

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

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

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

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