Компанията Coinspect идентифицира функцията CryptoJS.lib.WordArray.random() като слабия генератор на случайни числа, отговорен за източването на криптовалутни портфейли, наречено „Ill Bloom“.

Въведена в JavaScript библиотеката за криптография преди 12 години, функцията осигурява слаба ентропия, което засяга приложения за портфейли, използвани за генериране на възстановителни фрази (recovery phrases). On-chain анализът на Coinspect оценява откраднатите средства по време на две вълни от края на май на минимум около 5.7 милиона долара.

Фирмата за блокчейн сигурност, която измисли името „Ill Bloom“ през юли, потвърди пет приложения, които са използвали генератора като източник на ентропия за създаване на възстановителни фрази:

  • RRWallet: спряно от поддръжка според Coinspect. Няма корекция.
  • Bexo Wallet: проблемът е коригиран във версия 20.1.0, въпреки че обновените компилации все още не са качени.
  • NanChat: независимо потвърди, че версиите преди 1.3.0 са засегнати. Проблемът е отстранен във версия 1.3.0.
  • Bitcoin Libre: коригира уязвимостта във версия 4, издадена през юли 2024 г.
  • Milo: спряно от поддръжка. Няма корекция.

Coinspect сподели пред The Hacker News, че това са същите пет портфейла, за които спомена, без да ги назовава, през юли.

Фирмата заяви, че разработчикът зад разширението за браузър, споменато през юли, я е информирал, че разширението е спряно и никога не е било широко използвано. Coinspect предупреди, че не може да гарантира, че е идентифицирала всеки уязвим портфейл. Възможно е да са съществували и други засегнати мобилни или браузърни портфейли, които не са могли да бъдат изследвани, тъй като вече са били премахнати от магазините за приложения или разработчиците са ги заменили с коригирани версии, а старите уязвими версии вече не са достъпни.

Публичното оповестяване не предоставя пълния диапазон от засегнати версии за RRWallet, Bexo, Bitcoin Libre или Milo. Обновяването на приложението не поправя вече съществуваща фраза.

Възстановителна фраза, генерирана от засегната версия, остава лесна за отгатване, независимо къде е импортирана, включително в хардуерен портфейл. Потребителите, чиито фрази са генерирани по засегнатия начин, трябва да създадат нова фраза по сигурен начин и да прехвърлят средствата си. Coinspect пояснява, че хардуерно генерираните семена (seeds) и повечето съвременни софтуерни портфейли не са засегнати.

Coinspect анализира 128- и 256-битова ентропия. Те би трябвало да осигурят пространство за търсене съответно от 2^128 и 2^256 възможности, но уязвимият генератор ги намалява до приблизително 2^39 и 2^47, което е достатъчно малко, за да бъде изчерпано на обикновен хардуер.

Фирмата възпроизведе веригата на атаката чрез изброяване на изходните стойности, превръщането им в BIP39 фрази, извеждане на адреси и проверка на същите спрямо публичните данни в блокчейна.

Библиотеката веднъж коригира този проблем, но след това премахна корекцията. Генераторът „Multiply-With-Carry“, захранван от Math.random(), се появи през юни 2014 г. Версии 3.2.0 и 3.2.1 преминаха към вградена криптографска случайност, но 3.3.0 възстанови слабия код, тъй като промяната беше счетена за нарушаваща съвместимостта. Поради това обновяване в рамките на версия 3.x може да премести даден проект от коригирана версия към уязвима такава. Версия 4.0.0 възстанови трайно вградената случайност през февруари 2020 г.

Coinspect идентифицира ferrumnet/bip39 – разклонение на React Native, което заменя вградената криптографска случайност на оригиналния bip39 с CryptoJS – като един от начините за внедряване в софтуера за портфейли, но не и единствения.

Поддържащият CryptoJS Еван Восберг публикува консултация за сигурност GHSA-rg76-677x-56q9 на 5 август с критична оценка и CVSS рейтинг 9.0. Полето за пакети изброява всяка версия под 4.0.0, въпреки изключенията в 3.2.0 и 3.2.1.

В консултацията се посочва, че дадено приложение е засегнато само ако използва уязвимата функция за генериране на критични за сигурността стойности. Самото наличие на зависимостта не е достатъчно за изпълнение на това условие, така че диапазонът от пакети е по-широк от набора от уязвими за експлоатация приложения.

След като възстановителната фраза е генерирана от изходния код на функцията, последващото хеширане или обработка с PBKDF2 не могат да възстановят липсващата ентропия, както не може и по-късно обновяване на пакета.

Coinspect посочва, че уязвимостта е експлоатирана в две вълни на източване. При акция на 27 май бяха откраднати около 3.14 милиона долара от 431 акаунта. Втора вълна между 30 май и 13 юли отне 2.55 милиона долара от адреси, свързани с 522 семена, включително около 2.18 милиона USDT от един Tron акаунт на 4 юли.

Последващият анализ проследява 2114 идентифицирани семена и свързаните с тях адреси в блокчейните на Bitcoin, Ethereum, Tron, Rootstock и Polygon. Общо анализите оценяват измерените загуби на 5 690 922 долара до 13 юли, което Coinspect описва като долна граница.

Coinspect изчислява от блокчейн данни, че засегнатите потребители са хиляди в мрежите, съвместими с Ethereum Virtual Machine (EVM), и Bitcoin, но не предостави разбивка портфейл по портфейл. Към 6 август NanChat беше единственото назовано приложение, публикувало публично предупреждение.

Coinspect съобщи пред The Hacker News, че корекцията на Bexo във версия 20.1.0 не е специфична за конкретна платформа, но обновените версии все още не са качени. The Hacker News провери официалните записи на Bexo на 6 август, като App Store на Apple показваше версия 18.3.5 като текуща за iPhone, докато Google Play показваше обновяване за Android на 20 май.