Skip to content
Yieldo

Beanstalk

$181.0M
Украдено средств
Возвращено средств
17 Apr 2022
Дата инцидента
Техника
Flashloan Governance Attack
Классификация
Governance
Тип цели
DeFi Protocol
Затронутые сети
Ethereum
Источник
Нет публичной ссылки на источник

17 апреля 2022 года протокол Beanstalk Farms — кредитный алгоритмический стейблкоин на Ethereum — потерял $182 млн в результате атаки на его governance-механизм. Атаку в тот же день зафиксировала аналитическая компания PeckShield (CoinDesk). Атака заняла одну транзакцию и использовала не баг в смарт-контракте, а саму логику голосования протокола.

Как устроена атака

Голосующая сила в Beanstalk определялась количеством токена Stalk, которым адрес располагал в момент голосования — без снапшота на более раннюю дату и без блокировки токенов на срок. Именно это и стало точкой входа.

  • Атакующий взял серию flash loan — займов без залога, которые берутся и обязаны быть погашены в пределах одной транзакции — суммарно около $1 млрд в DAI, USDC и USDT через Aave, Uniswap и SushiSwap (Halborn).
  • На эти средства он внёс ликвидность в пулы Curve с BEAN и мгновенно получил супербольшинство голосующих токенов Stalk.
  • Этим большинством он тут же провёл вредоносное предложение через функцию emergencyCommit — механизм, задуманный для срочных решений при достижении супербольшинства голосов, который в обход обычной задержки исполнения примерно в 24 часа исполнял предложение немедленно.
  • Предложение переводило резервы протокола — LP-токены BEAN3CRV и другие активы — на адрес атакующего.
  • Атакующий вывел ликвидность, погасил все flash loan в той же транзакции и остался с 24 830 ETH и 36 млн BEAN — итоговая чистая выгода составила около $76–80 млн. Разница между этой цифрой и заголовочными $182 млн — это стоимость выведенных из протокола активов и самого токена BEAN на момент атаки, обрушившаяся сразу после опустошения казны.

Источники сходятся в сути механизма и называют его flashloan governance attack; расхождение есть только в точном проценте захваченных голосов — разные источники называют цифры от примерно двух третей до около 79%. Сам принцип — занять капитал на один блок, чтобы получить контроль над голосованием, — не оспаривает никто.

Что было дальше

Похищенные средства атакующий отмыл через Tornado Cash, а $250 тыс. из них отправил на адрес благотворительного сбора для Украины (CoinDesk) — от самого атакующего похищенное так и не вернули.

Beanstalk не получил компенсации от атакующего. Вместо этого в июне 2022 года команда запустила кампанию Barn Raise — продажу 77 млн токенов Fertilizer по $1, фактически заём под будущую эмиссию BEAN с доходностью возврата до 500% (CoinDesk). Это новый долг протокола перед сообществом, а не возврат украденного. После двух независимых аудитов и перехода управления на мультисиг из девяти участников сообщества — до разработки нового, устойчивого к flash loan механизма голосования — протокол «разморозили» 6 августа 2022 года: держатели более 99% Stalk проголосовали за перезапуск (The Block).

Что из этого следует

  • Уязвим любой протокол, где право голоса определяется мгновенным балансом токена, а не снапшотом на прошлую дату или заблокированной на срок позицией — это касается on-chain governance в целом, а не только стейблкоинов.
  • Признак риска, заметный со стороны: если управляющий токен свободно торгуется на DEX с ликвидностью, достаточной для крупного flash loan, а голосование не защищено снапшотом или таймлоком — контроль над протоколом фактически можно арендовать на один блок.
  • «Аварийные» функции, обходящие обычную задержку исполнения решений, — обоюдоострый инструмент: та же функция emergencyCommit, задуманная для быстрой реакции на кризис, стала вектором атаки.
  • Инцидент стал хрестоматийным примером flashloan governance attack: после него в практике DAO закрепились снапшот голосующей силы на момент создания предложения и обязательный таймлок между принятием решения и его исполнением как минимальная защита от подобных атак.

On-chain DeFi несёт риск смарт-контрактов. Держите основные средства на регулируемой бирже.