В кошельке для Эфириума Parity снова обнаружена уязвимость
Критическая ошибка консенсуса была обнаружена в тестовой среде, используемой Parity – одним из двух наиболее распространенных кошельков для второго по капитализации блокчейна в мире.
В записи в блоге, опубликованной британской компанией Parity Technologies, сообщается, что была обнаружена проблема, способная отключить синхронизацию на устройствах, на которых запущен кошелек Parity. Это могло привести к тому, что устройства, на которых запущено другое программное обеспечение, не будут распознавать транзакции, которые не были синхронизированы. Хотя уязвимость была обнаружена в тестовой сети, злоумышленники могут использовать ее и в основной сети.
Поэтому теперь Parity призывает всех пользователей обновить свое программное обеспечение и загрузить версию с патчем. Публичные данные показывают, что ошибка могла повлиять примерно на 30% сети Эфириума – тех, кто использует программное обеспечение Parity. В частности, на их способность синхронизации с основной сетью. Но, по словам представителей Parity, проблема была исправлена до того, как она достигла узлов, работающих в основной сети Эфириума.
Тем не менее пользователям необходимо обновить кошельки, чтобы исключить возможность распространение этой уязвимости на основную сеть. В Твиттере несколько фирм, в том числе майнинговый пул Bitfly, заявили, что обновили свои клиенты до новой версии (1.10.6-stable или 1.11.3-beta).
Позже появилось предположение, что уязвимость может повлиять на любые блокчейны, которые используют программное обеспечение Parity, включая пользователей Ethereum Classic (ETC).
Информация об уязвимости появилась в то время, когда Parity и так находится под пристальным вниманием из-за нескольких аналогичных проблем с безопасностью. В частности, в ноябре прошлого года ошибка
в одном из кошельков компании привела к тому, что 513 774 16 ETH или $311 миллионов в соответствии с текущим курсом, были заморожены и перестали быть доступны для их владельцев. Дискуссия на тему того, следует ли возвращать замороженные средства, продолжается
и по сей день.
При этом Parity заявила
о своей приверженности усовершенствованию процессу обеспечения безопасности, написав: «Мы хотели бы, чтобы наши ошибки стали катализатором для улучшения безопасности в Эфириуме».
Три маленькие строчки кода
Вэй Тан (Wei Tang), разработчик Parity, который участвовал в создании патча, сказал, что ошибка связана с частью кода из предложения EIP 86.
Основной целью предложения EIP 86 было добавление так называемой «абстракции счета» – функции, которая позволяет отправлять транзакции без подписи отправителя. Полное обновление Эфириума до EIP 86 было отложено из-за его сложности, однако Вэй пояснил, что Parity все же внедрила код, возможно, в связи с ее ролью в предстоящем переходе Эфириума на новый алгоритм консенсуса.
По словам Вэя, команда, отвечающая за внедрение обновления в Parity, упустила из вида три строки кода, которые привели к возникновению уязвимости.
«Мы пропустили проверку условия в нашем коде, а это заставило полный узел Parity принять блок, содержащий недействительные транзакции», – сказал Вэй.
В тестовой сети Ropsten было обнаружено несколько таких транзакций, и из-за несовместимости транзакций с блокчейном Эфириума, произошел форк между Parity и Geth.
В пресс-релизе глава направления безопасности Parity Кирилл Пименов сказал, что в «худшем случае» подобные транзакции привели бы к появлению поврежденных блоков в сети Эфириума, которые «по-прежнему считались бы действительными другими пострадавшими узлами Parity». И с учетом поддержки достаточной мощностью хэширования, подобная уязвимость привела бы к разветвлению блокчейна.
«Реакция на эту ситуацию была проактивной, то есть мы смогли подготовить исправление до того, как кто-то действительно смог использовать ошибку в своих целях. В результате нам удалось предотвратить форк сети», – заявил Пименов в пресс-релизе.
Вэй это подтвердил и отметил, что исправление, которое было выпущено всего несколько часов назад, было простым. «Мы просто добавили эти три строки в наш код», – сказал Вэй. «Но да, их отсутствие могло бы привести к серьезным проблемам. Мы будем и дальше проверять код».