Согласно статье, опубликованной инженером Purse Брейдоном Фуллером (Braydon Fuller) и основным разработчиком протокола Handshake Джаведом Ханом (Javed Khan), уязвимость была обнаружена в июне 2018 года. Ей был присвоен уровень серьезности 7.8 по шкале от 1 до 10, что считается «высоким» (9 или выше является «критическим» уровнем). По словам Хана, это было вызвано тем, что «удаленные узлы» не смогли устранить недействительные транзакции из своей памяти.
Невозможность удалить эти транзакции могла привести к тому, что злоумышленник передаст узлу-жертве большое количество устаревших данных. Это приведет к «неконтролируемому потреблению ресурсов», и в конечном итоге станет причиной остановки работы узла. Решение второго уровня, например, Lightning Network, подвергались риску из-за уязвимости, однако риск потери средств не затрагивал полные узлы Биткоина.
«Не было механизма, позволяющего удостовериться в действительности деталей ожидающей обработки транзакции. В некоторых случаях возникала вероятность заполнения удаленной памяти недействительными транзакциями», – сказал Хан.
Разработчики утверждают, что никаких попыток воспользоваться этой уязвимостью обнаружено не было. По словам Фуллера, информация о ней не раскрывалась в течение двух лет, поскольку операторам узлов потребовалось больше времени для обновления, чем ожидалось. Хотя уязвимость была исправлена, ее раскрытие подчеркивает трудности построения глобального денежного стандарта на языках программирования, не говоря уже о высоких технических барьерах для участия в разработке ведущей криптовалюты.
Уязвимость появилась в Bitcoin Core в ноябре 2017 года. Согласно документу, около 50% узлов Биткоина в то время были подвержены атаке, однако более ранние версии Bitcoin Core не были затронуты. Хан отметил, что уязвимость открывала злоумышленникам возможность украсть средства с узлов, у которых были открытые каналы на Lightning. Версии 0.16.0 и 0.16.1 Bitcoin Core были подвержены уязвимости и исправлены разработчиком Мэттом Коралло (Matt Corallo) после того, как Фуллер сообщил о проблеме в июле 2018 года.
За открытием Фуллера, который также был ведущим разработчиком протокола децентрализованного облачного хранилища Storj, последовала еще одна ошибка, устраненная двумя месяцами позже в версии 0.16.3. Один из аспектов этой ошибки позволял майнерам «раздувать предложение Биткоина», поскольку они могли дважды потратить определенные суммы, как писала в то время команда Bitcoin Core. Экстренный патч, выпущенный в этой версии Bitcoin Core, также устраняет обнаруженную Фуллером ошибку.
В реестре Common Vulnerabilities and Exposures (CVE) Национального института стандартов и технологий в 2018 году под номером CVE-2018-17145 было зарезервировано место для уязвимости, связанной с потреблением ресурсов, но оно еще не заполнено подробной информацией. CVE представляет собой общедоступный классификатор заметных ошибок программного обеспечения. Bitcoin Core – это эталонная реализация или стандартная версия сетевого программного обеспечения. Уязвимость также могла быть в нескольких других реализациях ПО Биткоина и его ответвлений:
-
Bitcoin Knots v0.16.0
-
Все бета-версии Bcoin до v1.0.0-pre
-
Все версии Btcd до v0.20.1-beta
-
Litecoin Core v0.16.0
-
Namecoin Core v0.16.1
-
Все версии Dcrd до v1.5.1.
Ко всем этим реализациям были применены патчи, устраняющие уязвимость. Напомним, что недавно пользователь Electrum потерял 1 400 BTC после загрузки старой версии кошелька, работающей на вредоносных серверах. Эта уязвимость устранена в версиях 3.3.4 и выше.