Специалисты компании Unciphered, занимающейся блокчейн-безопасностью, обнаружили ряд проблем, связанных с популярной JavaScript-библиотекой BitcoinJS, используемой во многих браузерных криптокошельках. Проблемы, получившие общее название Randstorm, представляют угрозу для кошельков, созданных в период с 2011 по 2015 год, и позволяют восстановить пароли, получив несанкционированный доступ к чужим активам.
Как объяснили исследователи, Randstorm – это единое название для «ряда багов, конструктивных решений и изменений в API, которые при взаимодействии друг с другом резко снижают количество случайных чисел в браузерах определенного времени (2011-2015)».
По словам специалистов, в уязвимых кошельках, которые были сгенерированы с использованием потенциально слабых криптографических ключей, хранится более миллиарда долларов в криптовалюте (около 1,4 млн BTC).
Впервые проблема была обнаружена экспертами Unciphered еще в 2022 году, когда они занимались проблемой клиента, который не мог войти в свой кошелек на Blockchain.com. Кроме того, ранее, в 2018 году, об этой уязвимости писал ИБ-специалист по ником ketamine, однако тогда эта проблема не привлекла большого внимания.
Как уже было сказано выше, суть проблемы заключается в использовании опенсорсной библиотеки BitcoinJS, которая широко применяется для разработки браузерных версий криптовалютных кошельков. В частности, корень проблемы связан с использованием в пакете функции SecureRandom() из библиотеки JSBN, в сочетании с существовавшими на тот момент криптографическими слабостями в имплементации браузерами функции Math.random(), которая допускала генерацию слабых псевдослучайных чисел. В марте 2014 года разработчики BitcoinJS отказались от использования JSBN.
В результате нехватка энтропии могла быть использована для проведения брутфорс-атак на восстановление приватных ключей кошельков, сгенерированных с помощью библиотеки BitcoinJS (или зависимых от нее проектов). Легче всего взламывались кошельки, созданные до марта 2012 года.
«Дефект был встроен в кошельки, созданные с помощью этого ПО, и он останется там навсегда, если только средства не будут перемещены на новый кошелек, созданный с помощью другого софта», — предупредили в Unciphered.
Список кошельков, которые используют или использовали BitcoinJS, можно увидеть ниже.