Błąd w Coldcard miał umożliwić kradzieże bitcoinów warte ok. 130 mln USD
Zespoły Bitcoin Engineering i Security w Block oraz niezależni deweloperzy Bitcoin Core powiązali ostatnią serię strat w portfelach Coinkite Coldcard z konkretną usterką firmware'u. Wada ujawniła słaby punkt samodzielnej opieki nad bitcoinem (self-custody) jeszcze zanim użytkownik w ogóle zobaczył lub zapisał seed: generowanie losowości w urządzeniu zostało przekierowane z hardware'owego źródła STM32 na deterministyczny mechanizm awaryjny MicroPython o nazwie Yasmarang.
Najpoważniej ucierpiały urządzenia Mk2 i Mk3 z oprogramowaniem 4.0.1–4.1.9. W tych wersjach seedy powstawały z losowością sprowadzoną do niewielkiego, przeszukiwalnego zbioru. Modele Mk4, Q i Mk5 były dotknięte w mniejszym stopniu: generowały seedy z ok. 72 bitami entropii, nadal wyraźnie poniżej 128 bitów przewidzianych w projekcie.
Dlaczego to groźne: użytkownik mógł bezpiecznie przepisać 12 lub 24 słowa, schować je w sejfie i trzymać urządzenie offline przez lata, a mimo to posiadać klucz, który napastnik był w stanie odtworzyć, przeszukując ograniczoną przestrzeń wyników generatora awaryjnego. Aktualizacja firmware'u chroni tylko seedy wygenerowane dopiero po jej instalacji. Każdy seed utworzony wcześniej podatną ścieżką należy w pełni zastąpić. W komunikacie Coinkite zalecono wygenerowanie całkiem nowego seeda i przeniesienie środków. Importowanie starej frazy do portfela innego producenta nie usuwa problemu, bo słabość dotyczy źródła seeda i "podróżuje" razem ze słowami odzyskiwania.
W praktyce część poszkodowanych była narażona od chwili, gdy urządzenie wygenerowało klucz — miesiące lub lata przed pierwszą wpłatą. Późniejsza staranność w przechowywaniu frazy nie zmieniała faktu, że przestrzeń możliwych kluczy została z góry zawężona.
Coldcard zbudował reputację na funkcjach często wskazywanych w poradnikach bezpieczeństwa self-custody: firmware tylko dla Bitcoina, podpisywanie air-gapped, podwójne secure elementy, publiczny kod źródłowy i powtarzalne buildy. Odtworzenie opublikowanego firmware'u i porównanie z binarką dystrybuowaną do użytkowników potwierdza integralność dystrybucji, ale nie zastępuje audytu samego projektu i ścieżek wykonania w kodzie. Podatna ścieżka trafiła do firmware'u udostępnianego od 2021 r. i była dostarczana aż do ujawnienia w lipcu tego roku — pięcioletnie okno, w którym kod pozostawał publiczny, a błąd nie został wykryty. Według not technicznych Coinkite wcześniejsze przeglądy potwierdzały, że właściwy generator losowy sprzętu istnieje w binarce, ale nie potwierdziły, że rutyna generowania seeda faktycznie z niego korzysta.
Dwie grupy użytkowników miały dodatkową warstwę ochrony. Po pierwsze, osoby używające silnej, unikalnej frazy hasłowej BIP39 (passphrase) utrudniały sam atak rekonstrukcji, bo BIP39 wyprowadza seed portfela z mnemonika połączonego z solą zawierającą passphrase; inna passphrase daje inny portfel przy tych samych słowach. To rozwiązanie jest niezależne od PIN-u (PIN tylko odblokowuje sprzęt), choć Coinkite i tak rekomendował migrację także w tym przypadku. Po drugie, Coinkite wyłączył z tej konkretnej usterki użytkowników, którzy przy tworzeniu seeda dodali zewnętrzną entropię, np. co najmniej 50 uczciwych, niezależnych rzutów prywatną kostką — wtedy wadliwy generator urządzenia nie był jedynym źródłem losowości.
Andrew Mannoukas, CISO w Xapo Bank, ujął w komentarzu dla CryptoSlate sens problemu: lekcja nie polega na tym, że portfele sprzętowe są złe, lecz że groźna jest koncentracja ryzyka. Gdy bezpieczeństwo bitcoina sprowadza się do jednego sekretu utworzonego na jednym urządzeniu w niepowtarzalnym momencie, użytkownik dziedziczy wszystkie założenia "wypalone" w tej chwili. Dodał, że dane z branży od lat pokazują, iż większość strat wynika dziś z zarządzania kluczami i błędów operacyjnych.
Tekst zwraca też uwagę na często pomijany szczegół przy multisigu: konfiguracja 2-z-3 blokuje wydanie środków jednym skompromitowanym kluczem, ale jeśli wszystkie trzy klucze powstały z tej samej wadliwej implementacji, całość sprowadza się do jednego wspólnego punktu awarii. Dokumentacja Coldcard dopuszcza tworzenie wielu współpodpisów na jednym urządzeniu przez różne passphrase, co może dawać pozór niezależności przy wspólnym źródle ryzyka. Kluczowe staje się więc nie samo "czy to multisig", lecz kto wygenerował każdy klucz, jaką implementacją i z jakiego źródła losowości.
W materiale zestawiono to z innym, głośnym sporem o granice zaufania: opcjonalną usługą Recover w Ledgerze. Recover powoduje, że Secure Element duplikuje i szyfruje entropię portfela, dzieli wynik na trzy zaszyfrowane fragmenty i wysyła je do osobnych dostawców kopii zapasowych; wymaga to subskrypcji oraz fizycznej akceptacji na urządzeniu. Tam granica bezpieczeństwa przesuwa się na zewnątrz urządzenia w warunkach zatwierdzanych przez użytkownika. W przypadku Coinkite problem pojawił się wcześniej: firmware osłabił sekret, zanim w ogóle zadziałała "granica" urządzenia.
Skala strat według danych on-chain rosła falami. Początkowe "sweeps" objęły ok. 594 BTC z ok. 500 portfeli. Badacze powiązali następnie co najmniej trzy przypuszczalne fale łącznie z niemal 1 367 BTC na ponad 4 500 adresów, warte ok. 89 mln USD w tamtym momencie. Doniesienia z 3 sierpnia wskazywały możliwą czwartą falę, która mogłaby podnieść sumę w kierunku 114 mln USD. Alex Thorn z Galaxy Digital podkreślał, że same wzorce w blockchainie nie przesądzają o związku części "wyczyszczonych" adresów z podatnym firmware Coldcard, więc atrybucja pozostaje wstępna. Aktualizacja z 4 sierpnia od Lookonchain, powołująca się na Galaxy Research, szacowała, że straty powiązane z Coldcard mogły sięgnąć 2 055 BTC, czyli ok. 130 mln USD, na ponad 7 700 dotkniętych adresów.
Szerszy kontekst jest niekorzystny: TRM Labs ocenił, że w I połowie 2026 r. kompromitacja infrastruktury i operacji — głównie kradzież kluczy prywatnych i seed phrase — odpowiadała za ok. 76% wartości skradzionej w hackach krypto, choć stanowiła ok. 15% wszystkich incydentów. CertiK wskazał osobno, że kompromitacja portfeli była w tym samym okresie najkosztowniejszą kategorią ataków: ponad 444 mln USD w 33 zdarzeniach. To sugeruje, że napastnicy coraz częściej zarabiają na polowaniu na procesy wokół kluczy, a nie na łamaniu kryptografii.
Założyciel Coinkite Rodolfo Novak publicznie przeprosił, zadeklarował pełną odpowiedzialność i zaoferował wsparcie przy zgłoszeniach na policję, roszczeniach ubezpieczeniowych oraz dochodzeniach blockchain. Według stanu na 3 sierpnia zwroty nie były wśród wskazanych rozwiązań. W tekście podkreślono różnicę między giełdą a producentem portfela: giełda czasem ma rezerwy, ubezpieczenie lub bilans, z którego może pokryć straty klientów, natomiast producent sprzętu sprzedaje urządzenie, a custody pozostaje po stronie użytkownika, co pozostawia kwestię odpowiedzialności za wadę produkcyjną nierozstrzygniętą.
Co dalej z self-custody Bitcoina: scenariusz bazowy zakłada, że migracje środków wyprzedzą kolejne fale ataków, a producenci wprowadzą atestacje entropii, testy generowania seedów i czytelniejsze narzędzia do awaryjnej rotacji kluczy. Passphrase, zewnętrzna entropia z kości i właściwie zdywersyfikowany multisig mają stać się zaleceniami domyślnymi, a nie "zaawansowanymi" wskazówkami. Ryzyko negatywnego scenariusza pozostaje realne: jeśli badacze znajdą kolejne ścieżki słabych seedów w innych modelach lub procedurach konfiguracji, zaufanie może spadać szybciej, niż producenci będą w stanie łatać problemy. Do tego dochodzą straty wynikające z paniki: błędy przy przenoszeniu środków, ponowne użycie adresów, pośpieszne transfery i nowa fala oszustw podszywających się pod "wsparcie portfela".
Materiał kończy się tezą, że posiadanie własnych kluczy odbiera giełdzie możliwość zamrożenia wypłat, rehypotekacji salda czy upadłości z cudzymi środkami na bilansie. W self-custody pozostaje jednak jedno zależne ogniwo: producent urządzenia, które zamienia losowość w klucz. Pojedynczy seed, urodzony na sprzęcie jednej firmy w jednorazowym momencie, staje się realną suwerennością dopiero wtedy, gdy stoi za nim druga, niezależna przesłanka bezpieczeństwa.