С аппаратных кошельков Coldcard вывели 1367 BTC (около $88.6 млн на момент атаки) с более чем 4585 адресов. Причина — критическая ошибка в прошивке, которая висела там с марта 2021 года и делала сгенерированные seed-фразы предсказуемыми. Аналитики Galaxy Research разобрали взлом по цепочке: хакеры работали волнами.
Как разворачивалась атака
Взлом проходил в несколько этапов.
- Первая волна (30 июля): За 41 минуту хакеры вывели 1082.65 BTC (примерно $70.2 млн) с 1196 адресов.
- Вторая и третья волны: В последующие дни под удар попали более мелкие кошельки. Общий ущерб довели до 1367 BTC.
В Galaxy Research говорят, что первые две волны имели одинаковый почерк: идентичные комиссии и паттерны транзакций. Это работа одного оператора. Третья волна отличалась по тактике — либо подключился другой хакер, либо первый изменил скрипт. Большая часть украденной крипты до сих пор лежит без движения на адресах злоумышленников.
В чем заключалась уязвимость
Баг внесли в код еще в марте 2021 года с релизом версии 4.0.1. Когда разработчики интегрировали новую библиотеку libNgU, генератор случайных чисел (RNG) устройства переключился с аппаратного алгоритма на программный псевдослучайный.
Seed-фразы генерировались не случайно, а на основе предсказуемых метрик: уникального ID микросхемы и показателей таймера. Хакерам хватило вычислительных мощностей, чтобы сбрутить приватные ключи офлайн. Физический доступ к самим Coldcard им не был нужен.
Производитель кошельков Coinkite подозревает, что дыру в безопасности нашли с помощью ИИ, скормив ему открытый исходный код прошивки.
Что делать владельцам Coldcard
Накатить апдейт на уже созданный кошелек — не выход. Coinkite выпустила экстренное предупреждение с мануалом для пользователей.
- Обновите прошивку. Ставьте запатченную версию (4.2.0 для Mk2/Mk3 и новее для других моделей).
- Создайте новую seed-фразу. Старая сид-фраза из уязвимой прошивки скомпрометирована навсегда.
- Переведите все средства. Активы нужно сразу перевести на новый кошелек, сгенерированный уже на безопасном устройстве.
В Coinkite говорят, что повезло только тем, кто при генерации seed-фразы делал минимум 50 бросков игральных костей или закрывал кошелек уникальной BIP-39 парольной фразой. Другие устройства вендора (TAPSIGNER и SATSCARD) не пострадали, потому что там другая кодовая база.
Выводы
Это один из крупнейших взломов аппаратных кошельков в истории. Холодное хранение больше не является синонимом абсолютной безопасности, если софт под капотом генерирует ключи по предсказуемому алгоритму. Self-custody не отменяет риски, а просто перекладывает их на плечи пользователя, которому теперь нужно разбираться в энтропии, мультиподписях и бросать кубики для надежной генерации сид-фразы 😬