Атаку осуществили через legacy auction keeper, который хранил залог из ликвидаций MakerDAO в марте 2020 года, известных как «черный четверг». Эксплойт стал возможен из-за отсутствия контроля доступа к одной из функций контракта.
Как произошла атака
По данным анализа инцидента, хакер сначала профинансировал адрес 0,1 $ETH через Tornado Cash, а в 06:12 UTC развернул специальный контракт для атаки. Через минуту он совершил транзакцию, которая позволила получить доступ к активам старого keeper-контракта.
Ключевой проблемой стала функция 0x8804d1de в реализации контракта. В отличие от других привилегированных функций, она не проверяла права доступа и позволяла передать произвольному адресу делегацию через MakerDAO Vat.
Схема эксплойта состояла из нескольких этапов:
- хакер создал адаптерный модуль и передал его адрес в уязвимую функцию keeper;
- контракт предоставил этому модулю полный контроль над учетной записью keeper в Vat через Vat.hope();
- после этого keeper вызвал функцию join() модуля, передав выполнение кода злоумышленнику;
- злоумышленник завершил четыре старых аукциона — №1457, 1458, 1459 и 1460;
- каждый из них содержал лот на 50 $ETH, который keeper выиграл по нулевой ставке еще в марте 2020 года, но так и не рассчитался за него;
- после завершения аукционов 200 $ETH зачислили на счет keeper в Vat, откуда злоумышленник вывел их через полученную делегацию.
Таким образом, именно незавершенные позиции из ликвидаций 2020 года сделали старую уязвимость экономически выгодной.
Средства начали миксовать через шесть минут
Все 200 $ETH поступили злоумышленнику в рамках одной эксплойт-транзакции через минуту после атаки. Уже через шесть минут он осуществил первый перевод в Tornado Cash.
В целом злоумышленник начал распределять украденные средства на депозиты по 10 $ETH. Анализ транзакций показывает, что для этого использовался Tornado Cash router.
Главной причиной инцидента стало именно отсутствие проверки прав доступа к функции 0x8804d1de. Кроме того, после предоставления делегации контракт не вызывал nope, поэтому переданные полномочия остались активными после завершения операции.
Напомним, что в 2023 году неизвестный арбитражный бот использовал контракт MakerDAO DssFlash, чтобы получить флеш-кредит на $200 млн в DAI, но после комиссий заработал лишь $3,24. В 2024 году протокол Curio, связанный с экосистемой MakerDAO, подвергся другой атаке из-за уязвимости смарт-контракта: злоумышленник выпустил 1 млрд CGT, а ущерб впоследствии оценили в $16 млн.