Фізично жоден Coldcard не вилучали й не під’єднували до комп’ютера. Атака відбулася віддалено: злочинець відновлював seed-фрази гаманців, створені на вразливій прошивці .
Окрема, раніше зафіксована хвиля цієї ж атаки вивела 594 BTC — близько $38 млн — приблизно з 500 гаманців із одним підписом. Вона тривала близько 25 хвилин, орієнтовно з 01:31 UTC . Galaxy Research, Chainalysis і команда Block незалежно пов’язали ці викрадення з однією вразливістю Coldcard .
Команда Bitcoin Engineering and Security компанії Block під керівництвом інженера Клея Гарретта встановила, що оператор користувався платним акаунтом у відомого провайдера блокчейн-сервісів. Через нього він міг швидко знаходити й запитувати адреси, потенційно створені на вразливій прошивці . Назву провайдера не розкрили.
На слід розслідувачів вивела незвична поведінка в блокчейні: надзвичайно швидке й послідовне спорожнення адрес, які мали однакову слабкість. Block заявила, що виявила сліди, які безпосередньо пов’язують активність оператора з інфраструктурою цього провайдера .
За словами Гарретта, розслідування показало «надзвичайну специфічність — аж до рівня акаунта» . Фактично аналітичний сервіс став для нападника інструментом розвідки: він допоміг скласти список уразливих адрес, а потім визначити, які з них мають найбільші баланси .
Вразливість з’явилася у коміті прошивки від березня 2021 року, починаючи з версії 4.0.1 для Coldcard Mk3, під час переходу на бібліотеку Bitcoin Core libsecp256k1 .
Причиною стала помилка в макросі конфігурації збірки. Вона змусила прошивку оминути спеціальний апаратний генератор випадкових чисел STM32 (TRNG) і перейти до детермінованого програмного генератора Yasmarang із MicroPython .
Логіка помилки була технічно невеликою, але наслідки виявилися системними:
MICROPY_HW_ENABLE_RNG встановили в нуль, оскільки Coldcard мала окрему обгортку для апаратного генератора.libngu перевіряла не те, чи макрос увімкнений, а лише те, чи він визначений.0, бібліотека помилково вирішила, що апаратний шлях доступний.rng_get(), а не до апаратного генератора .Це знизило фактичну ентропію — рівень випадковості, від якого залежить непередбачуваність seed-фрази, — приблизно до 32–40 бітів замість очікуваних 128 і більше. Простір пошуку скоротився приблизно до 4 млрд можливих значень, що вже можна перебирати за допомогою сучасного обладнання .
Seed-фрази, створені без додаткових кидків власних кубиків або парольної фрази BIP39, виявилися особливо вразливими . Генеральний директор Coinkite Родольфо Новак, відомий як NVK, визнав помилку: «Я навмисно встановив MICROPY_HW_ENABLE_RNG у нуль, думаючи, що нам не потрібна жодна з версій, але це працює не так» .
| Потенційно вразливі | Що зменшувало ризик або вважалося невразливим на початковому етапі |
|---|---|
| Coldcard Mk3 із прошивкою 4.0.1–5.0.3 | Seed-фрази, створені з власними кидками кубиків або парольною фразою BIP39 |
| Seed-фрази, створені без додаткової ентропії користувача | Mk4, Q і Mk5 — згідно з первинним аналізом Coinkite |
Пізніше Coinkite розширила рекомендації на окремі версії прошивки Mk4, Mk5 і Q після додаткового аналізу та випустила екстрені оновлення для всіх моделей, яких могли стосуватися проблеми .
Користувачам важливо не просто перевірити версію прошивки, а з’ясувати, на якій саме версії було створено seed. Якщо він потрапляє до потенційно вразливого періоду, безпечним рішенням є міграція на новий гаманець, а не очікування, поки адресу атакують.
Атака вдарила по одному з головних аргументів на користь self-custody — самостійного зберігання криптоактивів: переконанню, що апаратний гаманець гарантує криптографічну безпеку навіть за наявності помилок у програмному забезпеченні .
Холодний або навіть ізольований від мережі гаманець може залишатися недоступним для прямого злому, але це не допоможе, якщо його прошивка спочатку створила передбачуваний ключ. Засновник Binance Чанпен Чжао, відомий як CZ, публічно попередив, що програмна помилка здатна зробити небезпечним навіть air-gapped-пристрій .
Self-custody перекладає на власника не лише контроль, а й відповідальність за оновлення, резервні копії, перевірку пристрою та міграцію коштів у разі інциденту. Тому дискусія зміщується до питання, чи виправданий цей операційний ризик для середнього інвестора. Деякі аналітики очікують, що подібні випадки можуть підштовхнути частину користувачів до регульованих кастодіанів і біткоїн-ETF .
Помилка залишалася у відкритому коді понад п’ять років. Це показує, що прозорість open-source-проєкту — важлива, але недостатня умова захисту. Деякі дослідники вважають, що автоматизований аудит із використанням ШІ може доповнити перевірку людьми й допомогти виявляти тонкі помилки інтеграції генераторів випадкових чисел ще до їх експлуатації .
Інцидент також продемонстрував системну точку відмови: одна помилка виробника в роботі з ентропією може одночасно зробити вразливими всі гаманці, створені на певній версії прошивки. Кастодіальні моделі частково знижують такий ризик за допомогою розподілу ключів і багатосторонніх обчислень, хоча натомість користувач втрачає повний одноосібний контроль над активами.
Детальний технічний розбір опублікували інженери Block , а технічне пояснення Coinkite доступне в їхньому матеріалі про ентропію .