Эксперт объяснил механизм масштабного взлома Poly Network на $611 млн
Разработчик Кельвин Фихтер подробно разобрал механизм атаки на межсетевой протокол Poly Network, в результате которой хакер вывел $611 млн в различных криптовалютах.
По его словам, для перемещения активов между блокчейнами Poly Network запрашивает подтверждения транзакций на основании подписи валидаторов. Злоумышленник переписал код, чтобы проводить аутентификацию транзакций единолично.
Фихтер выяснил, что у Poly Network есть привилегированный контракт EthCrossChainManager, который имеет право запускать сообщения из другой цепочки.
Для выполнения кроссчейн-транзакции протокол использует функцию verifyHeaderAndExecuteTx. Ее может вызвать любой пользователь. Она проверяет правильность заголовка блока, подписи и включение транзакции в блок.
Функция также осуществляет вызов целевого контракта EthCrossChainData. По словам эксперта, критический недостаток заключается в том, что доступ к этому действию через кроссчейн-механизм имели все пользователи.
«Этот контракт отслеживает список открытых ключей, которые аутентифицируют данные, поступающие из другой цепочки. Если изменить этот список, хакеру не придется взламывать закрытые ключи», – отметил он.
При этом контракт EthCrossChainData находится под управлением EthCrossChainManager.
«Отправляя кроссчейн-сообщение, пользователь может обманом заставить EthCrossChainManager вызвать контракт EthCrossChainData, пройдя проверку onlyOwner. Теперь пользователю просто нужно создать правильные данные, чтобы запустить функцию, изменяющую открытые ключи», – объяснил аналитик.
В дальнейшем, чтобы заставить EthCrossChainManager вызывать правильную функцию, хакер подделал первые четыре байта входящих данных транзакции, так называемый хеш подписи или сигхеш.
Благодаря этому хакеру не потребовалась компрометация закрытого ключа. Он просто создал правильные данные и «контракт взломал сам себя».
«Один из важнейших уроков проектирования, который нужно извлечь из этого: если у вас есть подобные межсетевые релейные контракты, убедитесь, что их нельзя использовать для вызова специальных контрактов. Если контракту необходимы такие особые привилегии, убедитесь, что пользователи не могут вызвать специальные контракты через межсетевые сообщения», – заявил Фихтер.
Эксперт также предположил, что хакер отправил сообщение из сети Ontology, чтобы атаку было труднее отследить.
Исследователь консенсус-протоколов Андрей Соболь в комментарии ForkLog заявил, что атака на Poly Network стала возможна из-за бага в смарт-контракте.
«Концептуально мост был построен примерно так же, как мосты в других межсетевых протоколах. Проблема в реализации», – указал он.
По его мнению, версия Фихтера описывает наиболее правдоподобную причину взлома.
Напомним, взлом межсетевого протокола Poly Network произошел 10 августа. В совокупности злоумышленник вывел из сетей Ethereum, Binance Smart Chain и Polygon $611 млн.
11 августа хакер заявил о готовности вернуть похищенные средства. Команда проекта создала три кошелька для этой цели.
Позднее на них поступили $1 млн в USDC, $1,1 млн в токене BTCB, $2 млн в Shiba Inu и $622 243 в стейблкоине FEI.
Источник: Источник