Бюджет на комиссии можно было сжечь бесплатно
Сервис платил сети раньше, чем проверял заявку. Даже отклонённая заявка стоила ему денег.
Заказчик: · NDA
- Прямая кражанет, проверено
- Ущерббюджет и отказ в работе
- Лимитыне было
О продукте
В Ethereum сервис оплачивал газ для обмена через делегирование EIP-7702. Сервер сам собирал вызовы контракта, клиент подтверждал их подписью. Проверка контракта и сборки вызовов не выявила пути прямого вывода средств.
Где была ошибка
Сервер принимал подпись клиента без проверки и ставил заявку в очередь. Контракт отклонял неверную подпись уже в блокчейне. К этому моменту сервис оплачивал газ за выполнение, даже если операция завершалась ошибкой.
Создание заявок было бесплатным, лимитов на аккаунт и день не было. Воркер допускал три попытки и использовал фиксированный лимит 2,5 млн единиц газа. Повторные заявки расходовали бюджет сервиса без затрат со стороны атакующего.
Чем это грозило
- Расход газового бюджета сервиса
- Отключение функции для всех пользователей
- Рост ущерба в сотни раз при дорогой сети
Забрать деньги себе злоумышленник не мог: комиссия уходит сети.
Как доказали
Проследили обработку неверной подписи до сборки транзакции. Симуляция через eth_call подтвердила: контракт отклоняет такую подпись. При реальной отправке сервис оплатил бы газ за выполнение до отказа.
Транзакции не отправляли. Риск оценили по комиссиям сети на момент аудита; фактический расход зависит от выполнения, а не только от лимита газа.
Как исправили
Если операция стоит денег, проверяйте вход до оплаты. Бюджетная атака — тоже атака.
Исправлено