7 декабря 2023 года, по данным Beosin EagleEye, контракт TIME на Ethereum стал жертвой хакерской атаки, в результате которой злоумышленник получил прибыль примерно в 188 000 долларов.
Это было не обычное нападение.
После отслеживания происхождения было обнаружено, что 4 декабря 2023 года ThirdWeb опубликовал в своем блоге и на официальных каналах предупреждение об уязвимости, в котором говорилось: «20 ноября 2023 года мы поняли, что существует уязвимость безопасности при интеграции общей открытой -шаблон библиотеки исходного кода для смарт-контрактов Web3. Эта уязвимость затрагивает некоторые предварительно созданные смарт-контракты Thirdweb, и мы обратились к соответствующим проектным группам для устранения последствий».
7 декабря контракт TIME на Ethereum стал первым проектом, ставшим жертвой этой проблемы безопасности. Сегодня давайте раскроем правду об этой атаке.
Общий обзор протокола
ERC2771 Собственный протокол безопасности метатранзакций:
Протокол EIP 2771 определяет протокол уровня контракта для контракта получателя, позволяющий принимать метатранзакции через контракт доверенной ретрансляции. Никаких изменений протокола не вносится. Протокол разработан, чтобы позволить Ethereum принимать вызовы от внешних учетных записей, у которых нет ETH для оплаты комиссий за газ. Протокол отправляет действительные msg.sender (называемый msgSender()) и msg.data (называемый msgData()) в контракт получателя, добавляя дополнительные данные вызова. Цель состоит в том, чтобы позволить Ethereum принимать вызовы с внешних учетных записей без ETH для оплаты комиссий за газ.
Из-за особенностей конструкции msg.sender, как описано в протоколе, получается с помощью функции _msgSender(). Эта функция проверяет, является ли инициатор доверенным ретранслятором, и если да, то перехватывает последние 20 байтов входящих данных вызова в качестве инициатора транзакции.
Библиотека пакетной обработки Muticall:
Muticall — это библиотека функций, предоставляемая OpenZeppelin Contracts для обработки нескольких вызовов в одном внешнем вызове.
Из события Time мы видим, что функция Multicall() в своей кодовой базе выполняет итерацию по функциям DelegateCall для обработки данных Calldata и вызова других функций в этом контракте.
Информация о событии контракта TIME
● Атакующая транзакция
0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6
● Адрес злоумышленника.
0xfde0d1575ed8e06fbf36256bcdfa1f359281455a
● Контракт на атаку
0x6980a47bee930a4584b09ee79ebe46484fbdbdd0
● Атакованный контракт
0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29
Анализ уязвимостей событий контракта TIME
Эта атака в основном использовала контракт Forwarder, который вызывал функцию множественного вызова токена TIME. Из-за использования токеном TIME собственного протокола безопасности метатранзакций ERC2771 злоумышленник злонамеренно подделал _msg.sender, что привело к уничтожению токенов в паре. В конечном итоге злоумышленник получил прибыль от повышения цены токена через биржи.
TIME Схема атаки на событие контракта
1. Злоумышленник первоначально использовал 5 WTH для обмена примерно на 3,45 миллиарда токенов времени в качестве подготовительных средств.
2. Впоследствии злоумышленник вызвал функцию выполнения пересылки посредством проверки подписи, передав вредоносные данные вызова следующим образом:
3. На этом этапе функция выполнения вызовет адрес req.to (адрес токена времени), пакет req.data и адрес req.from, а также вызовет функцию многократного вызова токена времени. Как хакер удалил req.from? Хакер установил длину (размер) data[1] равным 0x38, в результате чего multicall обрезал req.from при анализе данных.
4. Функция множественного вызова, называемая функцией записи, уничтожает жетоны времени в паре в качестве вызывающего.
5. Наконец, злоумышленник вызвал функцию синхронизации в паре для синхронизации резервов, в результате чего цена токенов времени выросла.
В итоге хакер обменял токены TIME, полученные на этапе подготовки, на ETH в паре, в результате чего получил прибыль в размере $188 000. Эта атака еще раз напоминает нам о критической важности безопасности смарт-контрактов. Команды проекта должны активизировать усилия по выявлению и устранению уязвимостей, чтобы обеспечить устойчивое развитие экосистемы блокчейна и безопасность пользователей.
Контакт
Если вам нужны какие-либо услуги безопасности блокчейна, свяжитесь с нами:
Официальный сайт Beosin EagleEye Twitter Telegram Linkedin