Cześć! Większość ludzi święcie wierzy, że portfele sprzętowe to twierdza nie do zdobycia. Cóż, nic bardziej mylnego. Parę dni temu przeczytałem pierwszy raport o czyszczeniu „zimnych” portfeli i dosłownie ścięło mnie z nóg.
Coldcard od Coinkite miał być przecież absolutnym złotym standardem dla bitcoinowych maksymalistów. A tu taka wtopa...
Dobra, koniec biadolenia. Jeśli trzymacie bity na Coldcardzie, czytajcie wyjątkowo uważnie. Poniżej rozłożę wszystko na czynniki pierwsze: od kryptograficznego podłoża tego problemu, aż po konkretny algorytm krok po kroku, jak uciec ze swoimi środkami z linii ognia tu i teraz.
⚠️ PILNE OSTRZEŻENIE
Jeśli generowaliście frazę mnemoniczną (seed) bezpośrednio na urządzeniu Coldcard w okresie od marca 2021 do lipca 2026 roku, WASZE ŚRODKI SĄ W STREFIE KRYTYCZNEGO RYZYKA.
Atakujący czyszczą właśnie blockchain w pełnym automacie. Natychmiast doczytajcie sekcję z instrukcją i ewakuujcie aktywa!
1. Co się właściwie stało: ekspresowe podsumowanie katastrofy
Krótko mówiąc: generator liczb losowych w oprogramowaniu układowym Coldcarda wypluwał wcale nie takie „losowe” wartości, jak powinien. W efekcie hakerzy byli w stanie odtworzyć klucze prywatne i urządzili sobie prawdziwe żniwa.
Atak idzie falami. I uwierzcie mi na słowo – trzecia fala na pewno nie jest ostatnią, dopóki na podatnych adresach zostaje choćby jeden satoshi.
Chronologia i skala strat
| Fale ataku | Data rozpoczęcia | Dotknięte adresy (wzrost) | Skradzione BTC (w fali) | Łącznie skradzione BTC | Ekwiwalent w USD (szacunek) |
|---|---|---|---|---|---|
| 1. fala | 30 lipca 2026 | ~1 196 | ~1 082.65 BTC | 1 082.65 BTC | ~$67.1M |
| 2. fala | 31 lipca 2026 | +1 477 (łącznie 2 673) | +76.16 BTC | 1 158.81 BTC | ~$71.8M |
| 3. fala | 02 sierpnia (teraz) | +1 912 (łącznie 4 585) | +207.73 BTC | 1 366.54 BTC | ~$84.7M |
Aż boli patrzeć na te cyfry. Prawie 85 milionów zielonych poszło w piach tylko dlatego, że w firmware nie zadziałała jedna flaga kompilatora.
2. Kto znajduje się w strefie ryzyka?
A teraz skupienie. Zagrożeni nie są absolutnie wszyscy użytkownicy Coldcarda.
Celowniku są konkretne modele i wersje:
- Coldcard Mk3: Wersje firmware od v4.1.2 do v5.2.1.
- Coldcard Mk4: Wersje firmware od v5.0.0 do v5.2.1.
- Coldcard Q (w tym Q1): Wszystkie wczesne kompilacje przed awaryjnym patchem z lipca 2026 roku.
Kluczowy jest jednak nie tyle sam model, co sposób wygenerowania klucza prywatnego.
Podatni na atak:
- Cis, którzy odpalili nówkę Coldcarda, kliknęli „Create New Seed”, zaufali domyślnej entropii systemowej i spisali 12 lub 24 słowa.
W miarę bezpieczni:
- Cis, którzy wygenerowali seeda za pomocą Dice Rolls (rzutów fizycznymi kośćmi) bezpośrednio na urządzeniu. To jest właśnie ta absolutnie kluczowa metoda, o której bez przerwy trąbię moim inżynierom! Fizyka kości całkowicie niweluje systemowy babol generatora.
- Cis, którzy zaimportowali gotowy seed, wygenerowany na innym bezpiecznym urządzeniu offline (np. przez Tails + Electrum albo przy użyciu dedykowanego softu na Raspberry Pi).
3. Jak sprawdzić, czy Twój portfel został skompromitowany
Dobra, chwila. Tylko bez paniki. Weźcie sprzęt do ręki i zróbcie szybką diagnostykę.
Krok 1: Sprawdzamy firmware i datę
Podepnijcie zasilanie (najlepiej przez kabel Power Only) i wklepcie PIN.
Przejdźcie ścieżką: Advanced -> System Information -> Version.
Sprawdźcie wersję. Jeśli macie zainstalowane np. v5.1.0 na Mk4, a seed był generowany gdzieś w latach 2022–2024, to jesteście w kropce i wisicie na celowniku.
Krok 2: Weryfikujemy adresy
Ekipa z Galaxy Research odwaliła kawał świetnej roboty – wypuścili raport z analizą oraz udostępnili publicznie pule zagrożonych ścieżek derywacji.
Możecie sprawdzić swoje adresy publiczne (xpub / zpub) przy użyciu specjalnego, otwartego skryptu weryfikacyjnego na oficjalnym GitHubie Coinkite.
⚠️ Podstawowa zasada BHP: Nigdy, zapamiętajcie to sobie raz na zawsze, NIGDY nie wpisujcie swoich 12/24 słów na żadnych stronach do „sprawdzania”! Weryfikuje się wyłącznie adresy publiczne (xpub) albo pojedyncze adresy BTC. Jeśli jakaś strona woła o seed phrase – to na 100% phishing i próba wyczyszczenia Was przez naciągaczy, zanim zrobi to automat.
4. Instrukcja krok po kroku: Jak bezpiecznie uratować środki
Rety, muszę to podkreślić po raz kolejny.
SAMO UPDATOWANIE FIRMWARE NIE WYSTARCZY!
Łatka naprawi generator na przyszłość, ale Wasza obecna fraza seed JEST JUŻ matematycznie przewidywalna dla botów wyłapujących podatności. Waszym zadaniem jest natychmiastowe przerzucenie całego BTC na zupełnie NOWY adres.
Krok 1: Aktualizacja oprogramowania (bezpieczny patch)
- Pobierzcie najnowszą wersję firmware (co najmniej v5.3.0X dla Mk4/Q) bezwzględnie z oficjalnej strony
coinkite.com/downloads. - Obowiązkowo zweryfikujcie podpis PGP pliku! (Instrukcję znajdziecie na oficjalnym blogu Coinkite).
- Wgrajcie plik .dfu lub .bin na MicroSD, włóżcie do Coldcarda i odpalcie
Advanced -> Upgrade Firmware.
Krok 2: Generowanie NOWEGO seeda (Tylko przez Dice Roll!)
Nie polegajcie już wyłącznie na automatycznym generatorze, nawet tym po patchu. Zróbcie to jak sztuka nakazuje:
- Wybierzcie
New Seed Words -> 24 Words. - Wciśnijcie przycisk
4(uruchomi się tryb wprowadzania rzutów kością). - Weźcie zwykłą kość do gry i zróbcie minimum 100 rzutów (50 to absolutne minimum). Uczciwie wklepujcie każdą wyrzuconą cyfrę. To daje prawdziwą entropię fizyczną.
- Zapiszcie nowe 24 słowa na papierze/stali. Jak to zgubicie – nikt Wam już nie pomoże.
Krok 3: Transfer środków (Transakcja ratunkowa)
Teraz trzeba zabrać krypto ze starego (zagrożonego) seeda i wysłać je na adres wygenerowany w kroku 2.
Tu zaczyna się wyścig z czasem. Boty hakerskie przeczesują mempool 24/7. Jeśli puścicie transakcję z niską prowizją, utknie ona w kolejce, a bot może przejąć Wasze środki, przebijając opłatę przez mechanizm RBF (Replace-By-Fee).
Krok 4: Kalkulacja opłaty i praca ze skryptem RBF
Nie skąpcie na opłacie transakcyjnej. Wbijcie na mempool.space, sprawdźcie aktualny High Priority fee i pomnóżcie go przez 1.5–2. Środki muszą wejść do NAJBLIŻSZEGO bloku.
5. Analiza techniczna: Jak dokładnie doszło do włamania?
Szczerze mówiąc, jako specjalista ds. bezpieczeństwa wciąż jestem w szoku, jak banalna okazała się ta podatność. To podręcznikowy przykład tego, jak jedna mała linijka kodu albo zapomniany `#define` w C/MicroPythonie potrafi położyć system warty dziesiątki miliardów dolarów.
Zajrzyjmy pod maskę i rozbierzmy kryptograficzną anatomię tego wtopienia na części pierwsze.
Istota błedu: Gdzie podziała się entropia?
System operacyjny Coldcard bazuje на zmodyfikowanym MicroPythonie. W normalnych warunkach, gdy urządzenie generuje nową frazę mnemoniczna (BIP-39), powinno ciągnąć prawdziwie losowe dane (TRNG – True Random Number Generator) bezpośrednio z dwóch niezależnych chipów bezpieczeństwa (Secure Elements) oraz z wbudowanego generatora mikrokontrolera STM32.
Jednak w marcu 2021 roku, podczas kolejnego refaktoringu kodu źródłowego i aktualizacji bazowej biblioteki MicroPythona, deweloperzy przypadkowo nadpisali inicjalizację generatora sprzętowego. W pliku konfiguracyjnym buildera zresetowano lub błędnie zdefiniowano flagę:
#define MICROPY_HW_ENABLE_RNG (0) // Uwaga: powinno być (1)!Co stało się dalej?
Gdy użytkownik klikał „Wygeneruj nowy portfel”, firmware próbował odpytać system o entropię.
Przez zerową flagę sterownik sprzętowy TRNG nie inicjalizował się tak, jak należy.
System nie wyrzucał żadnego błędu (bo mechanizmy fallbackowe przejmowały wywołanie), lecz zaczynał próbkowanie generatora pseudolosowego (PRNG), zainicjalizowanego stałym lub wyjątkowo przewidywalnym seedem — na przykład zegarem systemowym o dokładności milisekundowej albo stałą wartością rejestru po zresetowaniu zasilania!
Mówiąc prościej: Zamiast wyciągać 256 bitów absolutnego chaosu ze szumów fizycznych układu, portfel generował „losowość” z ciągu, w którym zmienność wynosiła zaledwie od 216 do 232 możliwych stanów.
Dla laika 232 kombinacji brzmi jak kosmiczna liczba (około 4,2 miliarda). Ale dla współczesnej karty graficznej (GPU) czy wyspecjalizowanej farmy obliczeniowej to robota na zaledwie 15 sekund!
Jak hakerzy odtworzyli klucze?
Napastnicy nie musieli nawet łamać konkretnych urządzeń fizycznie.
Przeanalizowali po prostu zakresy znaczników czasu (timestamps) oraz wersji oprogramowania układowego, skompilowali algorytm przewidywania stanu generatora PRNG i wygenerowali wszystkie możliwe warianty 12/24 słów, które MATEMATYCZNIE MOGŁA wypluć podatna wersja Coldcarda.
Dalej to już była czysta automatyka:
- Hakerzy wygenerowali tablicę adresów publicznych dla wszystkich przewidzianych fraz seed (ścieżki derywacji
m/84'/0'/0'/0/xdla Native SegWit orazm/86'/0'/0'/0/xdla Taproot). - Nasyłali bota na skanowanie całej historii blockchaina Bitcoina (zestawu UTXO).
- Gdy tylko adresy pokryły się z realnymi saldami, odpalono masowe, zautomatyzowane podstawianie kluczy prywatnych i czyszczenie portfeli do zera.
Właśnie dlatego atak nadchodzi falami. W pierwszej fali zgarnęli najbardziej oczywiste zakresy generacji. W drugiej i trzeciej – hakerzy rozszerzyli bruteforce na mniej prawdopodobne odchylenia czasowe oraz użyli dodatkowych ścieżek derywacji (np. struktur multisig czy niestandardowych kont).
Moi drodzy, główna nauczka z tej historii jest taka: nigdy nie polegajcie w 100% na jednym źródle entropii, nawet jeśli to przereklamowany portfel sprzętowy od czołowej marki.
Zapamiętajcie zasadę dwóch „NIE”:
- NIE używajcie automatycznej generacji kluczy bez dodania własnej entropii użytkownika (rzuty kośćmi – Dice Roll – to nasz najlepszy przyjaciel).
- NIE odkładajcie aktualizacji oprogramowania na później, ale przed wgraniem uaktualnienia ZAWSZE weryfikujcie podpisy PGP wydań.
Dbajcie o swoje satoshi, sprawdzajcie adresy i ewakuujcie środki natychmiast, jeśli jesteście w strefie ryzyka.