Оригинальная статья
Переведено специально для xss.pro
Камнями кидать - Jolah Milovski
"1 августа 2022 года на мосту Nomad произошел эксплойт, в результате которого были потеряны активы на сумму 190 миллионов долларов. Уязвимость вызвана тем, что для параметра «committedRoot» установлено значение 0 во время инициализации."
Nomad Bridge — это кросс-чейн-платформа криптовалюты блокчейн, которая поддерживает передачу активов между блокчейнами в Ethereum, Moonbeam, Avalanche, Evmos и Milkomeda. 1 августа 2022 года на Nomad Bridge произошел эксплойт, в результате которого были потеряны активы на сумму 190 миллионов долларов. Уязвимость вызвана тем, что для параметра «committedRoot» установлено значение 0 во время инициализации. Таким образом, злоумышленник может обойти процесс проверки сообщения и украсть токены из кроссчейн-контрактов.
Ethereum получает перевод 100 WBTC 0xa5fe9
Несколько транзакций атаки:
Вот так вот это все произошло:
Возьмем транзакцию 0xa5fe9 в качестве примера.
В процессе вызывается функция acceptRoot(messages[_messageHash]), которая используется для проверки "отправлен" ли рут и не истек ли таймаут. В этом примере messages[_messageHash] равен 0x000.
Функция acceptRoot(messages[_messageHash]) возвращает true, и сообщение подтверждается. При инициализации он установлен на 0x0000
После того, как сообщение "протолкнется в блокчейн", злоумышленник может перевести деньги в другие сети
Контракт реплики был неправильно инициализирован в транзакции 0x53fd9, где «committedRoot» был инициализирован равным 0.
Таким образом, злоумышленник может напрямую вызвать функцию «process(byte memory _message)» с любым «_message» для обхода проверки.
Адрес контракта: 0x88a69
Эта функция обеспечивает проверку проверки хэша сообщения.
Эта функция проверяет, аттестован, обработан и подтвержден ли root.
В транзакции инициализации 0x53fd9 владелец отправляет 0, и confirmAt[_committedRoot] устанавливаются в 1.
Поэтому 0 будет проверяться по адресу 0xb9233.
В соответствии с реализацией функции доказательства корень неподтвержденного сообщения также равен 0, поэтому 0 считается действительным подтвержденным корнем и может обойти проверку. Злоумышленнику нужно только отправить транзакцию в Nomad Bridge, чтобы получить соответствующий токен.
Переведено специально для xss.pro
Камнями кидать - Jolah Milovski
"1 августа 2022 года на мосту Nomad произошел эксплойт, в результате которого были потеряны активы на сумму 190 миллионов долларов. Уязвимость вызвана тем, что для параметра «committedRoot» установлено значение 0 во время инициализации."
Nomad Bridge — это кросс-чейн-платформа криптовалюты блокчейн, которая поддерживает передачу активов между блокчейнами в Ethereum, Moonbeam, Avalanche, Evmos и Milkomeda. 1 августа 2022 года на Nomad Bridge произошел эксплойт, в результате которого были потеряны активы на сумму 190 миллионов долларов. Уязвимость вызвана тем, что для параметра «committedRoot» установлено значение 0 во время инициализации. Таким образом, злоумышленник может обойти процесс проверки сообщения и украсть токены из кроссчейн-контрактов.
Введение в Nomad Bridge
Nomad Bridge — это межсетевой протокол криптовалюты блокчейна, который позволяет пользователям передавать активы между различными блокчейнами. Кроме того, эмитенты активов также могут развертывать токены в разных цепочках, а разработчики также могут создавать нативные межсетевые приложения через Nomad. Цель Nomad — обеспечить безопасное взаимодействие пользователей и разработчиков. Nomad поддерживает передачу токенов между Avalanche (AVAX), Ethereum (ETH), Evmos (EVMOS), Milkomeda C1 и Moonbeam (GLMR).Анализ событий эксплуатации уязвимостей
1 августа мост Nomad подвергся уязвимости в процессе обновления. Уязвимость вызвана тем, что в процессе инициализации для параметра «committedRoot» установлено значение 0. Злоумышленники могут обойти процесс проверки сообщения и злоупотреблять транзакциями копирования/вставки для запуска атак. В частности, пользователь копирует данные вызова исходной хакерской транзакции и заменяет их исходным адресом человека. Затем транзакция обрабатывается, и средства удаляются с моста Nomad. В течение четырех часов хакеры, боты и другие члены сообщества продолжали повторять атаки и сумели украсть почти все средства моста Nomad на общую сумму около 190 миллионов долларов.Рассмотр атаки:
Ethereum получает перевод 100 WBTC 0xa5fe9
Несколько транзакций атаки:
Вот так вот это все произошло:
Возьмем транзакцию 0xa5fe9 в качестве примера.
В процессе вызывается функция acceptRoot(messages[_messageHash]), которая используется для проверки "отправлен" ли рут и не истек ли таймаут. В этом примере messages[_messageHash] равен 0x000.
Функция acceptRoot(messages[_messageHash]) возвращает true, и сообщение подтверждается. При инициализации он установлен на 0x0000
После того, как сообщение "протолкнется в блокчейн", злоумышленник может перевести деньги в другие сети
Контракт реплики был неправильно инициализирован в транзакции 0x53fd9, где «committedRoot» был инициализирован равным 0.
Таким образом, злоумышленник может напрямую вызвать функцию «process(byte memory _message)» с любым «_message» для обхода проверки.
Адрес контракта: 0x88a69
Эта функция обеспечивает проверку проверки хэша сообщения.
Эта функция проверяет, аттестован, обработан и подтвержден ли root.
В транзакции инициализации 0x53fd9 владелец отправляет 0, и confirmAt[_committedRoot] устанавливаются в 1.
Поэтому 0 будет проверяться по адресу 0xb9233.
В соответствии с реализацией функции доказательства корень неподтвержденного сообщения также равен 0, поэтому 0 считается действительным подтвержденным корнем и может обойти проверку. Злоумышленнику нужно только отправить транзакцию в Nomad Bridge, чтобы получить соответствующий токен.
Отслеживание активов
Всего с Nomad Bridge было переведено токенов на сумму около 190 миллионов долларов.