22-месячное расследование компании Unciphered выявило существенный недостаток в широко используемом браузерном инструменте для создания криптовалютных кошельков BitcoinJS. Этот недостаток связан с функцией SecureRandom в библиотеке javascript JSBN, который усугубляется недостатками реализации Math.random в основных браузерах. Эта уязвимость, затрагивающая кошельки, созданные с 2011 по 2015 год, делает их уязвимыми для атак, причём более ранние кошельки становятся более уязвимыми.
В Unciphered сообщили, что координировали свои действия с различными организациями, чтобы предупредить миллионы пользователей об этой уязвимости. Для физических лиц, чьи активы находятся в затронутых уязвимостью кошельках, рекомендуется принять незамедлительные меры: перевести активы на вновь созданные кошельки с помощью надёжного программного обеспечения. Этот упреждающий шаг имеет решающее значение для защиты цифровых активов от потенциальной угрозы.
Уязвимость была обнаружена во время проекта для клиента, заблокировавшего биткоин-кошелёк Blockchain.com. Это привело к повторному обнаружению потенциальной проблемы в кошельках, созданных BitcoinJS в 2011-2015 годах. Последствия могут сказаться на миллионах криптовалютных кошельков, созданных за этот период, при этом значительное количество активов окажется под угрозой.
Уязвимость возникает из-за того, что BitcoinJS, Javascript-реализация биткоин-кошелька, использовала функцию SecureRandom библиотеки JSBN. Недостаток этой функции в её энтропии и PRNG (генераторе псевдослучайных чисел) создаёт ситуацию, при которой злоумышленник потенциально может восстановить приватный ключ. Неспособность функции SecureRandom эффективно использовать криптографические функции браузера усугубляла эту проблему, полагаясь на более слабые методы RNG.
Эта ситуация критическая, потому что приватные ключи биткоина, требующие 256 бит энтропии, были сгенерированы с меньшим значением, чем требуется. Влияние этой уязвимости делает некоторые кошельки более подверженными атакам, чем другие. Однако со временем были приняты определённые меры по снижению проблемы, такие как включение дополнительных источников энтропии, что снизило риски для новых кошельков.
Уязвимость выходит за рамки биткоина и потенциально затрагивает кошельки для Dogecoin, Litecoin и Zcash. Это также может повлиять на различные сервисы и проекты кошельков, код которых основан на BitcoinJS, в том числе такие популярные, как Dogechain.info и Blockchain.info.
Исследователи Unciphered подробно описывают, что исторически зависимости сторонних библиотек часто приводили к уязвимостям в разработке программного обеспечения. Подобные проблемы наблюдались и в других проектах, таких как OpenSSL на платформах Debian. Текущая ситуация с BitcoinJS и его экосистемой иллюстрирует этот постоянный риск в разработке программного обеспечения, особенно когда речь идёт о защите финансовых активов и конфиденциальной информации.