В мире криптовалют обновления и улучшения сети играют ключевую роль в поддержании безопасности и функциональности. Одним из последних значимых обновлений стал апгрейд Ethereum Pectra, который был развернут на тестнете Sepolia. Однако, как показал недавний инцидент, этот процесс столкнулся с серьезными проблемами из-за атаки неустановленного злоумышленника. Рассмотрим детали этого инцидента и его последствия для сети Ethereum. 5 марта 2025 года апгрейд Pectra был внедрен на тестнете Sepolia.
Практически сразу после развертывания разработчики начали замечать ошибки на узлах сети и увеличение числа пустых блоков в цепи. Эти симптомы указывали на наличие серьезных технических проблем, которые требовали немедленного вмешательства. В результате расследования выяснилось, что атака была вызвана использованием забытых уязвимостей, известных как "краевые случаи". Злоумышленник отправлял нулевые токен-трансферы на депозитный контракт, что приводило к повторному возникновению ошибок и дальнейшему ухудшению ситуации. Разработчик Ethereum Мариус ван дер Вйиден сообщил, что проблема была связана с тем, что депозитный контракт внезапно начал выбрасывать события, не совпадающие с ожидаемыми.
В результате такого поведения узлы сети начали отклонять транзакции и производить только пустые блоки, что фактически парализовало работу сети. Эта ошибка была связана с EIP-6110, который требовал единообразной обработки всех логов, связанных с депозитным контрактом. Команда разработчиков Geth выпустила исправление, чтобы игнорировать все ошибочные логи от депозитного контракта. Однако это исправление не охватило один специфический краевой случай, связанный со стандартом ERC-20, который не запрещает нулевые токен-транзакции. Это позволяло злоумышленникам отправлять нулевые токены с любого адреса, что в свою очередь вызывало выбросы событий, создавая дополнительную нагрузку на сеть.
Первоначально разработчики начали подозревать, что ошибку допустил доверенный валидатор. Однако дальнейшее исследование показало, что проблема исходила от недавно созданного аккаунта, финансируемого через публичный фаучер. Чтобы остановить атаку, команде разработчиков нужно было отфильтровать транзакции, взаимодействующие с депозитным контрактом. В то же время, они предполагали, что злоумышленник следит за их коммуникацией, что привело к необходимости реализовать "приватное исправление" на некоторых узлах контроля DevOps, охватывающих около 10% сети. После развертывания этого исправления узлы сети восстановили производство полных блоков, и работа цепи нормализовалась в 14:00 по всемирному координированному времени.
Несколько блоков спустя транзакция злоумышленника была успешно включена в цепь, что подтвердило, что все операторы узлов обновили свои системы. Несмотря на значительные сбои в работе сети, разработчики отметили, что Ethereum не потерял финализацию, и эта проблема затрагивала лишь тестнет Sepolia, так как депозитный контракт на тестнете отличается от основного контракта ETH на основной сети. В связи с инцидентом разработчики приняли решение отложить полный запуск обновления Pectra для дополнительного тестирования и отладки, что несомненно является разумным шагом, учитывая возникшие проблемы. Пектра представляет собой серьезное обновление для Ethereum, направленное на улучшение стекинга ETH, повышение масштабируемости второго уровня и расширение емкости сети. В его состав входит 11 предложенных улучшений Ethereum (EIP), и оно считается первым значимым обновлением после запуска Dencun в марте 2024 года.
Из предыдущих новостей стало известно, что разработчики планировали развернуть Pectra на основной сети к 8 апреля, при условии успешного завершения обновлений на тестнетах Holesky и Sepolia. Однако атака на тестнете Sepolia подтвердила, что вопросы безопасности и стабильности остаются ключевыми при внедрении крупных обновлений в криптовалютной экосистеме. На фоне этой ситуации возникает множество вопросов о том, как Ethereum и другие крупные криптовалюты будут справляться с угрозами в будущем. Ответ на эти вопросы требует комплексного подхода к безопасности на каждом этапе разработки и внедрения новых решений. Чем больше мы будем знать об уязвимостях и потенциальных атаках, тем лучше смогут подготовиться разработчики и поддерживающие команды.