Angriberen begyndte med de største wallets. Omkring 30 millioner dollar blev stjålet på bare 10 minutter, blandt andet fra en wallet med en saldo på 1,8 millioner dollar . Ingen Coldcard-enheder blev beslaglagt eller tilgået fysisk. I stedet genskabte angriberen wallet-seeds på afstand og brugte dem til at kontrollere de tilhørende midler .
En tidligere, separat opgørelse beskrev en bølge, hvor cirka 594 BTC – omkring 38 millioner dollar – blev tømt fra omtrent 500 single-signature-wallets i løbet af 25 minutter omkring kl. 01.31 UTC . Galaxy Research, Chainalysis og Blocks egne sikkerheds- og ingeniørteams har uafhængigt koblet hændelserne til den samme sårbarhed i Coldcard-firmware .
Blocks Bitcoin Engineering and Security-team, med ingeniøren Clay Garrett i spidsen, fandt tegn på, at angriberen benyttede en betalt konto hos en velkendt udbyder af blockchain-tjenester til at identificere og forespørge på sårbare adresser . Udbyderen er ikke offentligt navngivet.
Angrebsmønstret var usædvanligt: En lang række adresser med samme svaghed blev tømt hurtigt og i rækkefølge. Det gav efterforskerne et fingeraftryk, som kunne kobles til udbyderens infrastruktur .
Garrett beskrev sporene som havende en "ekstraordinær præcision, helt ned på kontoniveau" . Blockchain-tjenesten fungerede dermed som et rekognosceringsværktøj. Den gjorde det muligt at kortlægge, hvilke adresser der sandsynligvis var oprettet med sårbar firmware, og derefter prioritere de mest værdifulde mål .
Fejlen blev introduceret i en firmwareændring fra marts 2021, da Coldcard flyttede dele af sin Bitcoin-kryptografi til Bitcoin Cores bibliotek libsecp256k1 . En fejl i build-konfigurationen fik firmwaren til at omgå enhedens dedikerede STM32-hardwaregenerator for tilfældighed, også kaldet en TRNG, og i stedet falde tilbage på MicroPythons deterministiske softwaregenerator Yasmarang .
I produktionskonfigurationen var makroen MICROPY_HW_ENABLE_RNG sat til nul, fordi Coldcard havde en separat wrapper til hardwaregeneratoren. Men biblioteket libngu kontrollerede kun, om makroen var defineret – ikke om den havde en værdi, der faktisk aktiverede funktionen .
Fordi makroen eksisterede, konkluderede libngu, at hardwarestien var tilgængelig. I praksis bandt koden sig i stedet til MicroPythons softwarebaserede rng_get() . Enheden så altså ud til at bygge korrekt, men seed-genereringen brugte ikke den tilfældighedskilde, som udviklerne havde regnet med.
Det reducerede den effektive entropi til cirka 32–40 bit i stedet for de tilsigtede mindst 128 bit. Resultatet var omkring 4 milliarder mulige seed-værdier – et søgefelt, der kan gennemgås med moderne hardware . Seeds, som blev genereret uden ekstra terningkast fra brugeren eller en BIP39-passphrase, var derfor særligt udsatte .
Coinkites administrerende direktør Rodolfo Novak, også kendt som NVK, erkendte senere fejlen:
"Jeg satte specifikt
MICROPY_HW_ENABLE_RNGtil nul, fordi jeg troede, at vi ikke havde brug for nogen af versionerne. Men det er ikke det, den gør" .
| Berørt | Oprindeligt vurderet ikke berørt |
|---|---|
| Coldcard Mk3 med firmware 4.0.1 til og med 5.0.3 | Mk4, Q og Mk5 ifølge Coinkites første analyse |
| Seeds genereret uden brugerens egne terningkast eller en BIP39-passphrase | Seeds genereret med brugerleverede terningkast eller passphrase |
Efter yderligere analyse udvidede Coinkite sin sikkerhedsmeddelelse til også at omfatte bestemte firmwareversioner til Mk4, Mk5 og Q. Virksomheden udsendte samtidig nødopdateringer til alle berørte modeller . Brugere bør derfor kontrollere den seneste officielle vejledning for netop deres model og firmwareversion.
Det er vigtigt at skelne mellem en kompromitteret seed og selve enheden: Problemet ligger i den måde, bestemte firmwareversioner genererede seeds på. At opdatere enheden ændrer derfor ikke den seed, der allerede er blevet oprettet.
Coldcard-hændelsen rammer et centralt argument for self-custody: at man kan opbevare sine private nøgler selv og undgå en central mellemmand. En hardware-wallet skal netop beskytte brugeren mod software- og netværksrisici. Her viste det sig imidlertid, at en firmwarefejl kunne svække sikkerheden for alle wallets, der var oprettet i den berørte periode .
Hændelsen viser, at en wallet kan være offline og stadig være sårbar. Binance-stifteren Changpeng Zhao, kendt som CZ, advarede offentligt om, at selv air-gappede hardware-wallets kan blive usikre på grund af firmwarefejl . Den fysiske isolering hjælper ikke, hvis den hemmelige seed allerede blev genereret med for lidt tilfældighed.
Debatten bevæger sig nu igen hen imod spørgsmålet om, hvorvidt self-custody er den rette løsning for den gennemsnitlige investor. Nogle analytikere forventer, at hændelser som denne kan få flere brugere til at foretrække regulerede opbevaringsløsninger eller Bitcoin-ETF'er .
Det betyder ikke, at central opbevaring er risikofri. Men professionelle custodians kan blandt andet bruge nøgleopdeling og multiparty computation til at mindske risikoen for, at én fejl kompromitterer alle midler på én gang.
Fejlen stod i open source-kode i mere end fem år uden at blive opdaget. Det understreger, at gennemsigtighed alene ikke er en sikkerhedsgaranti. Nogle forskere peger derfor på automatiseret, AI-baseret kodegennemgang som et muligt supplement til menneskelig revision – især for subtile fejl i integrationen af tilfældighedsgeneratorer .
Sagen peger også på en systemisk svaghed: Hvis én hardwareproducent laver en fejl i entropien, kan alle wallets, der er oprettet med den samme firmware, blive sårbare på samme tid.
For den tekniske gennemgang, se Blocks ingeniørrapport og Coinkites tekniske baggrundsartikel .