Naciśnij ESC, aby zamknąć

Atak na Coldcard: Jak sprawdzić i bezpiecznie uratować BTC?

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 atakuData rozpoczęciaDotknięte adresy (wzrost)Skradzione BTC (w fali)Łącznie skradzione BTCEkwiwalent w USD (szacunek)
1. fala30 lipca 2026~1 196~1 082.65 BTC1 082.65 BTC~$67.1M
2. fala31 lipca 2026+1 477 (łącznie 2 673)+76.16 BTC1 158.81 BTC~$71.8M
3. fala02 sierpnia (teraz)+1 912 (łącznie 4 585)+207.73 BTC1 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/x dla Native SegWit oraz m/86'/0'/0'/0/x dla 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.


FAQ

Tak, ale z ogromnym „ale”. Jeśli użyłeś silnej, długiej i naprawdę losowej frazy (Passphrase), Twój ostateczny klucz główny jest matematycznie modyfikowany przez PBKDF2 (HMAC-SHA512). Hacker musiałby wtedy brute-force’ować nie tylko wycieknięty seed, ale też Twoje tajne hasło. Bądźmy jednak realistami: jeśli Twoja Passphrase to po prostu imię psa albo rok urodzenia, to przy wycieku bazowych 24 słów złamanie takiego hasła zajmie atakującemu dosłownie dwie minuty. Jeśli masz tam 20+ losowych znaków — Twoje środki są na razie względnie bezpieczne, ale Ja I TAK gorąco polecam jak najszybciej przenieść się na czysty seed.

Tak, sam sprzęt (chipy Secure Element ATECC608A / DS28E38) nie został zhakowany. Fizyczna ochrona przed odczytem pamięci, czujniki obudowy i mechanizmy anty-tamper działają bez zarzutu. Problem leżał wyłącznie po stronie softu (firmware'u). Po aktualizacji do załatanej wersji i wygenerowaniu nowego seeda za pomocą rzutów kośćmi (Dice Rolls), Twój Coldcard znowu zamienia się w niezdobytą twierdzę.

Oficjalne stanowisko Coinkite sprowadza się na ten moment do przyznania się do błędu w kodzie i wypuszczenia awaryjnych łatek. Biorąc pod uwagę skalę strat (prawie 85 mln USD), mało prawdopodobne jest, by kanadyjska firma miała takie rezerwy na pokrycie szkód z własnej kieszeni, chyba że uruchomią jakieś fundusze ubezpieczeniowe. Na ich oficjalnym koncie na X i blogu wiszą ostrzeżenia, ale od strony prawnej — zgodnie z wyłączeniem odpowiedzialności w licencjach open-source (GPL/BSD) — pełna odpowiedzialność za bezpieczeństwo kluczy spoczywa na użytkowniku. To brutalny świat self-custody: Not your keys, not your coins, ale też — bad code, lost coins.
Oleg Filatov

As the Chief Technology Officer at EXMON Exchange, I focus on building secure, scalable crypto infrastructure and developing systems that protect user assets and privacy.

With over 15 years in cybersecurity, blockchain, and DevOps, I specialize in smart contract analysis, threat modeling, and secure system architecture.

At EXMON Academy, I share practical insights from real-world...

...

Dodaj opinię

Twój adres e-mail nie zostanie opublikowany. Obowiązkowe pola są oznaczone*