Обновление Ethereum Pectra в тестовой сети подверглось атаке

Обновление Ethereum Pectra в тестовой сети подверглось атаке

Неизвестный злоумышленник побудил разработчиков Ethereum выпустить «частное исправление», поскольку сеть столкнулась с техническими проблемами во время обновления Pectra в тестовой сети Sepolia.

В отчете после инцидента разработчик Ethereum Мариус ван дер Вейден сообщил, что злоумышленник воспользовался упущенным из виду пограничным случаем, неоднократно вызывая ошибки, отправляя переводы с нулевым токеном на депозитный контракт, что еще больше усложнило и без того проблемное развертывание.

Что случилось?

5 марта обновление Pectra было запущено на Sepolia, но почти сразу же разработчики начали видеть сообщения об ошибках на своих узлах geth, а также увеличение количества добываемых пустых блоков.

По словам ван дер Вейдена, проблема возникла из-за того, что депозитный контракт генерировал неожиданное событие — событие перевода вместо требуемого события депозита, из-за чего узлы отклоняли транзакции и создавали только пустые блоки.

Ошибка была связана с EIP-6110, который требовал, чтобы все журналы депозитарного договора обрабатывались единообразно.

Команда geth выпустила исправление, которое игнорирует все ошибочные журналы, поступающие из депозитарного контракта, но, как сообщается, разработчики упустили из виду конкретный пограничный случай в стандарте ERC-20

«Стандарт ERC20 не запрещает перевод нулевых токенов, это позволяет любому человеку (даже если у него нет токенов) переводить нулевые токены на другой адрес, который выдаст событие», — пояснил ван дер Вейден, добавив, что злоумышленник воспользовался этим, неоднократно отправляя переводы нулевых токенов на депозитный контракт.

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

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

Чтобы остановить атаку, разработчикам нужно было отфильтровать транзакции, взаимодействующие с депозитным контрактом. Однако они подозревали, что злоумышленник отслеживает их чаты, что побудило их развернуть «частное исправление» для выбора узлов DevOps, контролирующих около 10% сети.

После развертывания исправления узлы возобновили производство полных блоков, что позволило сети нормально функционировать к 14:00 по UTC. Через несколько блоков транзакция злоумышленника была успешно заминирована, что подтвердило, что все операторы узлов обновились.

По словам ван дер Вейдена, несмотря на сбои, Ethereum никогда не терял окончательности, и проблема была ограничена Sepolia, поскольку ее контракт на депозит с токен-контролем отличался от контракта на депозит в основной сети Ethereum.

Тем не менее, разработчики решили отложить обновление Pectra для дальнейшего тестирования и отладки.

Читайте также: