TG Archive

Nomad мост хакнули на $150М, эксплойт был активен некоторое время, наиболее пострадали сети EVMOS, Moonbeam

Ресерчер Paradigm так описывает произошедший взлом:

https://twitter.com/samczsun/status/1554252024723546112

«Первоначально в группе ETH Security опсек инженер Officer CIA поделился информацией, что с моста Nomad начали выводить существенные суммы.

Первой мыслью было, что произошла какая-то неправильная настройка десятичных знаков токена. В конце концов, казалось, что мост проводит акцию "отправь 0,01 WBTC, получи 100 WBTC обратно".

Однако в дальнейшем стало понятно, что мост, принимая к примеру в сеть Moonbeam 0.01 WBTC, возвращал на Ethereum 100 WBTC:

https://moonscan.io/tx/0xcca9299c739a1b538150af007a34aba516b6dade1965e80198be021e3166fe4c
https://etherscan.io/tx/0xa5fe9d044e4f3e5aa5bc4c0709333cd2190cba0f4e7f16bcf73f49f83e4a5460

Транзакция с мостом в токенах WBTC на самом деле ничего не подтверждала. Она просто вызывала "процесс" вывода средств напрямую.

Т е мост обрабатывал любые правильно составленные сообщения, не доказывая их правильность, а сразу отдавая требуемое количество активов.

Оставался единственная причина хака - контракт Replica (ответственный за выдачу средств) содержал фатальную ошибку. Сообщение, которое передавалось мосту, должно было принадлежать приемлемому root сообщению. В противном случае проверка сообщения в строке 185 контракта должна была завершится неудачей.

Чтобы понять, действительно ли эта ошибка привела к опустошению моста - я отправил сообщение с недоказанным корнем, который равен 0x00, в итоге контракт начал прием этого доказательства.

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

Взлом был таким хаотичным - вам не нужно было знать язык программирования Solidity, вычислять значения меркла или чем-то подобном. Все, что вам нужно было сделать, это найти транзакцию, которая сработала, найти / заменить адрес другого человека на ваш, а затем повторно транслировать его».

👁 18.1K509Оригінал