Compound V2
- Техника
- Arithmetic Error
- Классификация
- Token & Share Accounting
- Тип цели
- DeFi Protocol
- Затронутые сети
- Ethereum
- Источник
- Нет публичной ссылки на источник
29 сентября 2021 года протокол кредитования Compound (Ethereum) провёл ончейн-апгрейд контракта Comptroller — Proposal 62, призванный поправить формулу начисления токена COMP пользователям рынков. Апгрейд сам содержал ошибку: часть адресов начала получать COMP на порядки больше положенного. Первые сообщения 30 сентября оценивали ущерб в $15 млн по трём транзакциям (CoinDesk), но по мере разбора цифра выросла до $80 млн, а после второй волны выплат несколько дней спустя — до совокупных $147 млн под риском (rekt.news). Средства пользователей на supply/borrow-рынках Compound не пострадали — баг затронул только резерв, из которого платится COMP.
Как устроена атака
Comptroller распределяет COMP пропорционально доле каждого адреса в рынке — апгрейд сломал коэффициент этого распределения, и вызов штатной публичной функции claim (никакого эксплойт-кода не требовалось) начал выдавать завышенные суммы. Показательный пример из отчёта CoinDesk: один адрес получил 91 000 COMP (около $27 млн на тот момент) при нулевой сумме внесённых или занятых активов. Сработал и второй фактор: отдельный контракт Reservoir капал в Comptroller по 0,5 COMP за блок и не опустошался около двух месяцев — накопилось порядка 200 000 COMP (~$68 млн). Когда спустя 3,5 дня после первой волны кто-то вызвал публичную функцию drip(), этот резерв влился в уже сломанный Comptroller и породил вторую волну завышенных выплат. Формально это не «эксплойт» в смысле обхода защиты — все вызовы шли через штатные, документированные функции контракта; ошибка была чисто арифметической, в коэффициенте распределения, что соответствует классификации Math Mistake Exploit. Внешнего атакующего, взломавшего систему, не было — были пользователи, дёргавшие обычные функции, которые из-за бага платили неправильно.
Что было дальше
У Comptroller не было аварийной паузы — только апгрейд через голосование с недельной задержкой. Proposal 63 временно отключил начисление COMP, Proposal 64 8 октября закрыл саму дыру в формуле, Proposal 65 добавил корректирующие функции. Основатель Compound Роберт Лешнер публично попросил получателей вернуть избыточные COMP в Timelock-контракт, оставив себе 10% как «white-hat»-вознаграждение, а тем, кто не вернёт, пригрозил репортом в IRS и деанонимизацией (rekt.news). Реакция сообщества была резко негативной, и Лешнер извинился, назвав день «худшим в истории протокола» и сравнив ситуацию с «банковской ошибкой в чью-то пользу» (CoinDesk). Добровольно вернули немного: по данным CoinDesk, на 1 октября лишь два адреса вернули в сумме 37 493 COMP (около $12 млн на тот момент) — заметно меньше заявленных $147 млн под риском. Юридических исков или арестов не последовало: Compound Labs открыто признал, что у децентрализованного протокола нет чёткого правового механизма истребовать токены у анонимных получателей. Протокол продолжил работать; по оценке rekt.news, угрозы в адрес пользователей нанесли репутации Compound больше вреда, чем сама денежная потеря.
Что из этого следует
- Контракты liquidity mining и наградного распределения так же критичны, как контракты с депозитами пользователей: апгрейд формулы начисления токена — не «косметическое» изменение, а полноценная зона риска, даже если «supplied/borrowed funds не затронуты».
- Публичные, ничем не защищённые служебные функции вроде
drip()— потенциальный усилитель уже вскрытого бага: после огласки первой волны выплат кто угодно мог дёрнуть функцию и запустить вторую, что и произошло. - У governance-only контрактов без экстренной паузы экспозиция бага измеряется не минутами, а днями голосования — с 29 сентября по 8 октября формула оставалась дырявой, и это время активно использовалось.
- Постфактум-угрозы («верните, или…») в децентрализованной системе без легального рычага давления работают хуже мягких публичных апелляций — доля добровольно возвращённого (~$12 млн из $147 млн) осталась минимальной.
On-chain DeFi несёт риск смарт-контрактов. Держите основные средства на регулируемой бирже.