Эксплойт FlashLoopAdapter опустошил связанные с Aave кошельки Safe на $305K

ETH
WETH
эксплойт контроля доступаFlashLoopAdapterкошелёк SafeФлеш-кредитSlowMistAave v3
3 часов назадИсточник: crypto.news
Эксплойт FlashLoopAdapter опустошил связанные с Aave кошельки Safe на $305K

Пользовательский FlashLoopAdapter, используемый для управления позициями с кредитным плечом на Aave v3, был эксплуатирован в сети Ethereum, в результате чего два кошелька Safe понесли убытки, оцениваемые в $305 000, после того как злоумышленник обошёл контроль доступа модуля.

Краткое содержание

  • Уязвимость контроля доступа FlashLoopAdapter позволила злоумышленнику вывести около $305 000 из двух кошельков Safe в сети Ethereum.
  • Злоумышленник использовал флеш-кредит Morpho, чтобы погасить долг Aave в размере примерно 1 335 WETH, прежде чем вывести около 1 306 weETH в качестве залога.
  • Основатель Aave Стани Кулечов заявил, что пострадавший контракт был сторонним адаптером, построенным на Aave, и не оказал никакого влияния на Aave v3.

Блокчейн-компания по безопасности SlowMist сообщила, что злоумышленник использовал уязвимость аутентификации в контракте FlashLoopAdapter, которая позволила поддельному Safe пройти проверки, предназначенные для ограничения доступа к кошелькам, включившим модуль. В конечном итоге злоумышленник сохранил около 114,09 ETH, используя модуль для манипулирования позициями, удерживаемыми пострадавшими кошельками.

Инцидент касался пользовательского контракта, построенного поверх Aave, а не основного протокола Aave v3. Defimon Alerts, обнаружившая атаку в 15:08:57 UTC 1 октября, заявила, что сам Aave v3 не пострадал.

Контроль доступа FlashLoopAdapter позволил поддельному Safe пройти проверку

FlashLoopAdapter был разработан как модуль Safe для открытия и закрытия позиций с кредитным плечом через Aave v3. Кошельки Safe, включившие модуль, могли использовать его для управления стратегиями циклического заимствования с участием заёмных активов и залога.

Согласно SlowMist, слабое место было обнаружено в контроле доступа, используемом функциями open() и close() адаптера.

Вместо независимого подтверждения того, что вызывающий является легитимным Safe, функции проверяли, возвращает ли ISafe(msg.sender).isModuleEnabled(address(this)) значение true. Злоумышленник мог развернуть поддельный контракт Safe, запрограммированный возвращать true, когда FlashLoopAdapter выполнял проверку.

Как только поддельный Safe проходил эту проверку, злоумышленник получал доступ к функциональности, которая должна была быть ограничена авторизованными кошельками.

Defimon Alerts сообщила, что проверки, выполняемые во время обратного вызова, не остановили транзакцию, поскольку контракт злоумышленника также выступал в качестве поставщика флеш-ликвидности. Другая функция, _swap(), затем позволяла выполнить необработанный вызов swapRouter с использованием предоставленных вызывающим swapCalldata.

Оба входных параметра могли контролироваться злоумышленником.

Вместо предоставления обычного swap-роутера злоумышленник установил роутером один из кошельков Safe жертвы. Calldata была настроена на вызов execTransactionFromModule — функции Safe, позволяющей включённому модулю выполнять транзакцию.

FlashLoopAdapter уже был включён кошельком Safe жертвы, поэтому результирующий вызов был принят.

Похожая проблема, связанная с разрешениями, прикреплёнными к модулям Safe, возникла в сентябре. Эксплуатация кошелька Safe в Ethereum, связанная с примерно 2 900 rsETH, была отслежена BlockSec до слабых проверок авторизации в контракте исполнителя, подключённого к включённому модулю Safe. MEV-бот совершил фронтраннинг попытки эксплуатации и получил активы до того, как исходная транзакция атаки была отменена, как ранее сообщал crypto.news.

Атакующий вернул 1 335 WETH, чтобы разблокировать залог weETH

Атака FlashLoopAdapter включала не просто перевод активов, уже находившихся в пострадавших кошельках.

Defimon Alerts сообщила, что атакующий взял флеш-кредит Morpho WETH и использовал заемную ликвидность для погашения примерно 1 335 WETH долга Aave, принадлежащего первому Safe, идентифицированному как 0xcfedf95a3653a128dfc2e4288758a1a1850d169f.

Погашение долга освободило залог, связанный с левериджной позицией Aave. Затем атакующий использовал скомпрометированный путь выполнения модуля, чтобы заставить Safe вывести примерно 1 306 weETH на адрес, контролируемый атакующим.

Второй Safe, 0xe3b23e47df7cd85876ac6cb05bdb9d7cd5b28520, потерял еще 6,4 weETH через тот же уязвимый модуль.

Defimon сообщила, что оба пострадавших Safe имели одного и того же единственного владельца.

Часть выведенных weETH была обменяна на WETH, поскольку атакующий погасил флеш-кредит и другие части транзакции. У атакующего осталось около 114,1 ETH, что оценивалось примерно в 305 000 долларов на момент сообщения об инциденте.

SlowMist отдельно оценила потери примерно в 114,09 ETH и заявила, что в процессе разблокировки залога было погашено примерно 1 300 WETH долга.

Таким образом, крупный вывод залога не представляет собой чистую прибыль атакующего. Большая часть капитала, перемещенного в ходе транзакции, была связана с погашением долга и закрытием левериджной позиции до того, как оставшиеся активы могли быть изъяты.

Контракты Aave v3 не были идентифицированы как уязвимый компонент

Ни одно из предупреждений безопасности не выявило недостатка в самом Aave v3.

Основатель и генеральный директор Aave Стани Кулечов заявил, что пострадавший контракт был сторонним внешним адаптером, построенным поверх Aave, и оказал «нулевое влияние на Aave v3».

FlashLoopAdapter — это отдельный пользовательский контракт, который использует Aave v3 для управления левериджными позициями, хранящимися через кошельки Safe. Сообщаемая уязвимость касалась того, как адаптер аутентифицирует вызывающих абонентов и что они могут заставить выполнить включенный модуль.

Это различие напоминает другие инциденты, в которых протокол или сервис оставался работоспособным, в то время как модуль, подключенный к кошелькам Safe, предоставлял маршрут, использованный атакующим.

В мае эксплойт, связанный с SquidRouterModule, опустошил Safe в Ethereum и Base. Около 3–3,2 млн долларов было украдено из 86 кошельков после того, как атакующие нацелились на сторонний модуль Safe, при этом Squid заявила, что ее основные контракты маршрутизатора и средства пользователей не пострадали.

Еще один инцидент, связанный с Safe, произошел несколько дней спустя, когда пользователей Gnosis Pay призвали вывести средства после эксплойта, связанного с его модулем задержки Zodiac. Соучредитель Gnosis Мартин Кёппельманн заявил тогда, что уязвимость могла позволить атакующему инициировать транзакции из Safe с использованием затронутого модуля.

Модулям Safe может быть предоставлено разрешение на выполнение транзакций из кошелька без необходимости каждый раз проходить стандартный поток транзакций владельца. FlashLoopAdapter полагался на эту возможность для автоматизации левериджных позиций Aave, но то же разрешение означало, что успешный обход логики аутентификации адаптера мог достичь активов, контролируемых Safe.

Атакующий FlashLoopAdapter сохранил около 114 ETH

SlowMist идентифицировала адрес атакующего как 0x42c2633438609881c8fBAb82414eb9A0c45F9353, а уязвимый контракт FlashLoopAdapter был указан как 0x16bb8b912da187870c23ec6756bb3fad061283d8.

Последовательность атаки сочетала поддельную аутентификацию Safe с контролем над маршрутизатором адаптера и параметрами calldata. Как только вредоносный контракт прошел первоначальную проверку, атакующий направил адаптер обратно к жертвенному Safe и вызвал его функцию выполнения модуля.

Флеш-кредит Morpho предоставил WETH, необходимые для погашения долга Aave большего кошелька до того, как его залог weETH мог быть изъят. Примерно 1 306 weETH было выведено из этого Safe, в то время как еще 6,4 weETH было взято из второго кошелька.

После погашения заимствованной ликвидности и конвертации части выведенных активов Defimon Alerts подсчитала, что злоумышленник сохранил приблизительно 114,1 ETH.

SlowMist классифицировала инцидент как уязвимость смарт-контракта и оценила причинённый ущерб в 305 000 долларов.