23 августа DeFi-протокол Term Finance потерял около $8,5 млн из-за атаки на систему управления .
Атака не была «взломом кода». Term Labs и Yearn Finance отдельно подчеркнули, что смарт-контракты не были скомпрометированы. Уязвимость находилась в кастомной обёртке управления (custom governance wrapper), которую Term создала поверх стандартной архитектуры Yearn V3. Это означает, что базовые хранилища Yearn остались в безопасности.
Term использовал opt-out модель управления: предложение проходило, если никто не возражал. Право голоса требовало обёртывания (wrapping) долей в отдельный управляющий токен — дополнительный шаг, который почти никто не делал. Общее предложение обёрнутых токенов в ETH Meta Vault составляло всего 0,5352 токена. Злоумышленник внёс около 0,5 ETH и обернул их, получив ~90,7% всего активного предложения.
Шаг 2: Обнуление задержки
23 августа в 06:25 UTC первое предложение было исполнено. Первые три действия в нём обнулили семидневную задержку модуля Zodiac Delay и передали контроль над ним исполнителю, контролируемому атакующим. Таким образом, механизм защиты был отключён тем же предложением, которое он должен был сдерживать.
Шаг 3: Вывод средств
Остальные действия отозвали капитал из четырёх реальных стратегий ETH Meta Vault — Shorewoods, August Digital, Parity Prime и Parity Core — и направили его в новую стратегию под названием «Fixed Recipient WETH Exit Strategy» (frWETH-EXIT). Эта стратегия вывела WETH из хранилища и переслала всю сумму оператору в том же вызове, оставив Meta Vault с 2 841,74 долями пустой стратегии.
Шаг 4: Повтор для USDC
Двадцать две минуты спустя второй кошелёк атакующего запустил идентичный сценарий против пяти USDC-хранилищ. Транзакция вывела 1 679 639 USDC, которые позже были обменяны на DAI.
Реакция Term Labs:
Механика атаки: ключевые уточнения
Стоимость атаки: Согласно отчётам, злоумышленник начал с 2 ETH, полученных через миксер Tornado Cash — это составляло около $7,600 на тот момент. Эта сумма была использована для получения полного контроля над голосованием в четырёх из пяти USDC-хранилищ и ~91% контроля над Ethereum Meta Vault.Атака не была «взломом кода». Term Labs и Yearn Finance отдельно подчеркнули, что смарт-контракты не были скомпрометированы. Уязвимость находилась в кастомной обёртке управления (custom governance wrapper), которую Term создала поверх стандартной архитектуры Yearn V3. Это означает, что базовые хранилища Yearn остались в безопасности.
Как именно прошла атака
Шаг 1: Захват голосов за копейкиTerm использовал opt-out модель управления: предложение проходило, если никто не возражал. Право голоса требовало обёртывания (wrapping) долей в отдельный управляющий токен — дополнительный шаг, который почти никто не делал. Общее предложение обёрнутых токенов в ETH Meta Vault составляло всего 0,5352 токена. Злоумышленник внёс около 0,5 ETH и обернул их, получив ~90,7% всего активного предложения.
Шаг 2: Обнуление задержки
23 августа в 06:25 UTC первое предложение было исполнено. Первые три действия в нём обнулили семидневную задержку модуля Zodiac Delay и передали контроль над ним исполнителю, контролируемому атакующим. Таким образом, механизм защиты был отключён тем же предложением, которое он должен был сдерживать.
Шаг 3: Вывод средств
Остальные действия отозвали капитал из четырёх реальных стратегий ETH Meta Vault — Shorewoods, August Digital, Parity Prime и Parity Core — и направили его в новую стратегию под названием «Fixed Recipient WETH Exit Strategy» (frWETH-EXIT). Эта стратегия вывела WETH из хранилища и переслала всю сумму оператору в том же вызове, оставив Meta Vault с 2 841,74 долями пустой стратегии.
Шаг 4: Повтор для USDC
Двадцать две минуты спустя второй кошелёк атакующего запустил идентичный сценарий против пяти USDC-хранилищ. Транзакция вывела 1 679 639 USDC, которые позже были обменяны на DAI.
Почему таймлок и вето не сработали
Таймлок — это задержка, а не автоматическая система безопасности. Он даёт время на обнаружение и реакцию, но не решает сам, является ли предложение вредоносным. Защита таймлока зависит от нескольких условий:- Видимость: операции в очереди должны быть легко обнаружимы ончейн.
- Интерпретируемость: пользователи должны понимать, что именно делает предложение.
- Полномочия на реакцию: должен существовать доверенный guardian или совет, способный отменить операцию.
- Достаточное время: задержка должна превышать время на обнаружение и координацию.
- Правильный охват: таймлок должен покрывать опасные действия, а не только рутинные изменения.
Последствия и реакция
Масштаб потерь: Убыток составил ~$8,5 млн — около 68% TVL хранилищ, что практически полностью опустошило Ethereum-хранилища.Реакция Term Labs:
- Meta Vaults закрыты навсегда — новые депозиты заблокированы без возможности возобновления.
- DAO-роли управления отозваны.
- Вывод средств остаётся открытым, но команда не раскрыла, сколько активов осталось в хранилищах и сколько смогут получить вкладчики.
- Term заявила, что базовый протокол и прямые рынки кредитования не пострадали.