Home » Ошибка в клиенте Ethereum proof-of-stake обнаружена и исправлена без происшествий

Ошибка в клиенте Ethereum proof-of-stake обнаружена и исправлена без происшествий

by Tim

Разработчики Ethereum обнаружили ошибку, которая могла привести к застреванию цепочек EVM из-за ошибки избытка газа в клиенте Besu.

Разработчики Ethereum обнаружили ошибку в клиенте Besu Ethereum, которая могла привести к «сбою консенсуса в сетях с несколькими реализациями EVM».

Гэри Шульте сообщил о проблеме в репозиторий Hyperledger GitHub, и ее обнаружил Мартин Холст Свенде. Подразумевается, что «ни в одной производственной сети нет транзакций, которые могли бы вызвать этот сбой. «

Ошибка, выявленная в ходе проверки кода The Merge

Свенде документально подтвердил, что обнаружил ошибку во время «некоторой проверки кода TheMerge». В ответнашему журналисту, Свенде заявил, что пользователи, работающие на узле Besu, застряли бы и «не смогли бы следовать цепочке канонов». Кроме того, любая «сеть с преобладанием besu могла быть остановлена на корню. «

Клиент Besu — второй по популярности клиент в сети Ethereum после Geth. Согласно данным, доступным на сайте ethernodes.org, клиент Besu используется 7,81% клиентов сети Ethereum.

Уязвимые версии клиента Besu

Версия 22.7.1 клиента Besu содержит исправление, гарантирующее, что «избыточный газ не будет выделяться для внутренних вызовов транзакций и исправляющее ошибки избыточного газа.»

Версии ранее 22.1.3 также «предотвращают некорректное выполнение», однако Ethereum mainnet требует наличия других функций, доступных только в более поздних версиях. Версии клиента с 22.4.0 по 22.7.0 в настоящее время считаются уязвимыми к ошибке с газом.

В результате пользователи клиента Besu в mainnet должны обновиться до исправленной версии.

Влияние и решение

Данно Феррин (Danno Ferrin) подробно описал проблему в статье на Hackmd, опубликованной 21 сентября. В анализе Феррина говорится, что

«Недостаток в обработке неподписанных данных как подписанных данных в правильно закодированном смарт-контракте может создать вызов функции, которая вернет больше газа, чем было передано. «

Дополнительную техническую информацию об ошибке можно найти в посте Феррина. Однако главным выводом является то, что ошибка была устранена без каких-либо проблем в сети Ethereum. Для того чтобы злоумышленник мог злонамеренно использовать ошибку, ему пришлось бы действовать точным образом.

«Для того чтобы возвести это в ранг ошибки, приводящей к халтингу цепи, требовался намеренно созданный вызов, включающий некоторые взаимодействия с правилом EIP-150 «все, кроме одной 64-й» и резервирование части доступного газа для вызывающего контракта. «

Если бы ошибка не была найдена, в любой цепочке с высоким участием клиента Besu мог бы возникнуть «бесконечный цикл» смарт-контракта, при котором контракт «действительно выполнялся бы вечно».

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

«Самый большой урок, продемонстрированный этим эксплойтом, заключается в том, что сравнение данных трассировки при выполнении фаззинга выявляет больше ошибок, чем простое сравнение конечных результатов»

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

Ошибка была исправлена в версии 22.7.1 с использованием «другого метода преобразования, который «зажимает» значения переполнения до максимальных ожидаемых значений, избегая проблем перевода подписи». Феррин прокомментировал, что пользователям, работающим на узлах в уязвимом диапазоне, следует обновиться до последней версии.

Related Posts

Leave a Comment