Специалисты компании 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 года.
Список кошельков, которые используют или использовали BitcoinJS, можно увидеть ниже.
Как объяснили исследователи, 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, можно увидеть ниже.