Атакуващ източи 1196 биткойн адреса за 41 минути на 30 юли, присвоявайки 1082,65 BTC на стойност около 70,2 милиона долара по това време. Galaxy Research картографира мащабното изтегляне на средства и го свърза с дефект във фърмуера на Coldcard – хардуерния портфейл, предназначен само за биткойни, произвеждан от канадската фирма Coinkite.
Грешка при интегрирането на фърмуера от март 2021 г. е пренасочила генерирането на начални думи (seed) към детерминистичен софтуерен генератор на псевдослучайни числа (PRNG) вместо към хардуерния генератор на случайни числа (RNG) на STM32.
От Block посочват, че атакуващ, който може да определи или достатъчно да ограничи уникалния идентификатор (UID) на устройството, състоянието на таймера и историята на предходните повиквания към генератора на случайни числа, може да възпроизведе потенциалните изходни потоци офлайн, без да има достъп до самото устройство. След това кандидатите за начални думи могат да бъдат проверени чрез извеждане на съответните им адреси и сравняването им с публичните данни от блокчейна.
На 31 юли Coinkite пусна спешен фърмуер за всеки засегнат модел и линия от версии, но инсталирането му не поправя вече съществуващи начални думи. Coinkite съветва собствениците на компрометирани начални думи да генерират нови с помощта на коригирания фърмуер и да прехвърлят криптовалутата си.
Възстановяването на стари начални думи върху обновен фърмуер или в друг портфейл пренася уязвимостта напред. Към момента няма публичен доклад, който да описва успешно реконструиране на начални думи на жертва и съпоставянето им с източен адрес.
Block проследи проблема до производствената конфигурация на Coldcard, която дефинира MICROPY_HW_ENABLE_RNG като нула, тъй като Coinkite предоставя своя собствена обвивка за хардуерния RNG. Библиотеката libngu обаче е проверявала дали макросът съществува, а не дали е активиран, което е обвързало компилацията с резервния механизъм Yasmarang на MicroPython. Този резервен механизъм на MicroPython се инициира от уникалния идентификатор на чипа и регистрите на таймера и не събира нова ентропия след първоначалното си стартиране.
Coinkite оценява ефективната ентропия на приблизително 40 бита при Mk3 и около 72 бита при Mk4, Mk5 и Q, в сравнение със 128 бита за 12-словесна начална фраза по стандарта BIP-39. Block не предоставя единна практическа цифра. Те определят условни тавани под 240,7 и 273,3 и предупреждават, че последното не е еквивалентно на 73-битова криптографска сигурност. Не е публикуван и бенчмарк за разбиване с груба сила (brute-force).
Повторното генериране при по-новите модели увеличава броя на кандидатите, но според Block практическата цена на атаката зависи от наличната информация за уникалния идентификатор (UID), времето за зареждане, предишните извиквания на RNG и цената за деривация.
Рискът от компрометиране зависи от фърмуера, който е работил по време на създаването на началните думи, а не от версията, инсталирана в момента:
- Mk2 и Mk3: Coinkite изброява версии на Mk3 от 4.0.1 до 4.1.9, като проблемът е отстранен в 4.2.0, и не споменава Mk2. Block поставя версиите от 4.0.0 до 4.1.9 както за Mk2, така и за Mk3 в уязвимия списък.
- Mk4 и Mk5: всички версии преди 5.6.0.
- Edge компилации: преди 6.6.0X за Mk4 и Mk5, и преди 6.6.0QX за Q.
От Coinkite заявяват, че начални думи, създадени с помощта на поне 50 честни, независими и хвърлени насаме зарчета, не са изложени на риск само от този бъг. Ако броят или поверителността на хвърлянията са несигурни, компанията препоръчва миграция. Силна, уникална парола по BIP-39 създава отделен портфейл, до който думите от началната фраза сами по себе си не могат да достигнат, но въпреки това производителят препоръчва замяна на началните думи.
Използването на мултиподпис (multisig) помага само в случаите, когато кворумът не е съставен изцяло от засегнати устройства. TAPSIGNER, OPENDIME и SATSCARD използват различни кодови бази и не са засегнати.
Никой не е посочил конкретния извършител. Galaxy, която картографира източването на 1196-те адреса, заяви, че не е открила други биткойн транзакции през предходните 30 дни със същия подпис от 30 sat/vB без ресто.
Оттам предупредиха, че този модел идентифицира оператора, а не самата кражба, тъй като едно масово изтегляне „изглежда по същия начин, както ако собственикът на криптовалутата сам е решил да премести активите си“.
Това разкритие следва изследването на Coinspect „Ill Bloom“ от началото на юли за друг дефект със слаб софтуерен генератор на случайни числа (PRNG) в по-стари софтуерни портфейли, свързан с източването на над 5 милиона долара от адреси в мрежите на Bitcoin, Ethereum, Tron, Rootstock и Polygon от май насам.