Skip to content
yieldo. Крипто-аналитика

Beanstalk

$181.0M
Украдено средств
17.04.2022
Дата инцидента
Техника
Flashloan Governance Attack
Классификация
Управление протоколом
Тип цели
DeFi-протокол
Затронутые сети
Ethereum
Источник
Beanstalk Rekt ↗

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 закрепились снапшот голосующей силы на момент создания предложения и обязательный таймлок между принятием решения и его исполнением как минимальная защита от подобных атак.