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

«Пожалуйста, обновите ваши узлы как можно скорее и дважды проверьте, что вы используете версию 1.10.6-stable или 1.11.3-beta», — говорится в блоге.

Согласно сообщению, баг вызывает рассинхронизацию клиента с другими участниками сети и, как следствие, невозможность пользователей, использующих другое ПО, принимать транзакции от тех, у кого установлен клиент Parity. Уязвимость была найдена в тестовой сети, но тот факт, что это могло быть использовано и в основной сети, вызывает определённое беспокойство, особенно если учесть, что ПО Parity используется примерно 30% пользователей сети Ethereum.

Тем не менее, по словам представителей Parity, уязвимость была устранена раньше, чем могла бы появиться в «живом блокчейне» Ethereum.

Об обновлении своих версий клиента уже сообщили несколько компаний, включая майнинг-пул Bitfly, однако есть мнение, что блокчейны, работающие на ПО Parity, всё же могут быть затронуты, — речь идёт о держателях Ethereum Classic (ETC).

«Это может разрушить $ETC. Моё мнение — это займёт менее 24 часов», — написал в Twitter разработчик проекта Cosmos Адриан Бринк (Adrian Brink).

Стоит отметить, Parity уже некоторое время находится под пристальным вниманием по поводу нескольких подобных случаев, вызывающих вопросы в отношении безопасности. Как известно, наибольший резонанс вызвала ситуация, когда в ноябре прошлого года баг в одном из кошельков компании привёл к тому, что 513,774.16 ETH или $313 млн по текущему курсу были заморожены и стали недоступны для своих владельцев. В то время как дискуссии о том, как вернуть замороженные средства владельцам, продолжаются, Parity заявляет о своих намерениях сконцентрироваться на вопросах безопасности.

«Мы будем рады, если наши баги станут катализатором разработки более безопасной сети Ethereum», — написали представители компании.

Что касается новой уязвимости, она, по словам разработчика Parity Вей Танга (Wei Tang), работавшего над её исправлением, имеет отношение к коду из предложения по улучшению Ethereum (EIP) 86.

Так, EIP 86 первоначально разрабатывался в расчёте на апгрейд сети, создаваясь специально для так называемой «абстракции счёта», позволяющей отправлять транзакции без подписи отправителя. Впоследствии полный апгрейд Ethereum с EIP 86 был отложен из-за его высокой сложности, хотя, как объясняет разработчик, код был интегрирован представителями Parity — возможно, в связи с его значимостью для предстоящего изменения механизма консенсуса.

Как отмечает Вей Танг, команда, отвечавшая за внедрение решения в ПО Parity, упустила из виду три строки программного кода, что и привело к появлению бага.

«Мы пропустили проверку условия в нашем коде, которая обусловила возможность полных нодов Parity принимать блок, содержащий неверные транзакции», — пояснил разработчик.

Несколько подобных транзакций были обнаружены в тестовой сети Robsten, и, ввиду несовместимости транзакций с основным Ethereum, они стали причиной форка между Parity и Geth — крупнейшего провайдера софта для Ethereum, предпочитаемого 60% пользователей.

По словам главы службы безопасности Parity Кирилла Пименова, в «худшем случае» такие транзакции могли привести к появлению повреждённых блоков в основной сети Ethereum, которые рассматривались бы как «действительные» другими затронутыми узлами клиентами Parity. Учитывая «достаточную хеш-мощность», Пименов предполагает, что это могло привести к расколу сети.

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

Вей Танг согласился с этим, отметив, что фиксация бага не потребовала много усилий.

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