Det anmärkningsvärda är att ingen Coldcard-enhet behövde beslagtas eller manipuleras. Angreppet genomfördes på distans genom att angriparen återskapade plånboksfrön och därmed kunde beräkna de privata nycklarna .
En tidigare kartlagd våg av samma typ av angrepp tömde omkring 594 BTC, värda cirka 38 miljoner dollar, från ungefär 500 plånböcker med enkel signatur under en 25-minutersperiod runt 01:31 UTC . Galaxy Research, Chainalysis och Blocks ingenjörsteam kopplade oberoende av varandra stölderna till samma sårbarhet i Coldcard .
Blocks Bitcoin Engineering and Security-team, under ledning av ingenjören Clay Garrett, fann att angriparen använde ett betalt konto hos en välkänd leverantör av blockkedjetjänster för att snabbt identifiera och fråga ut sårbara adresser . Leverantörens namn har inte offentliggjorts.
Mönstret i blockkedjan väckte utredarnas uppmärksamhet: adresser med samma svaghet sveptes ovanligt snabbt och i en tydlig ordningsföljd. Block bekräftade spår som kopplade angriparens aktivitet direkt till leverantörens infrastruktur .
Garrett beskrev fyndet som av en ”extraordinär precision, ända ner på kontonivå” . Tjänsten fungerade i praktiken som ett spaningsverktyg. Den gjorde det möjligt att kartlägga vilka adresser som sannolikt hade skapats med sårbar firmware och att prioritera de mest värdefulla målen .
Chainalysis analys visade dessutom att angriparen medvetet började med de största saldona. Ungefär 30 miljoner dollar stals under de första tio minuterna, innan omkring 500 plånböcker tömdes i den första större svepningen .
Felet introducerades i en firmware-ändring från mars 2021, i samband med en övergång till Bitcoin Cores bibliotek libsecp256k1. För Coldcard Mk3 började den berörda firmwareperioden med version 4.0.1 .
Problemet var ett fel i byggkonfigurationen. Det gjorde att firmware inte använde STM32-kretsens särskilda hårdvarubaserade slumptalsgenerator, en så kallad TRNG (true random number generator). I stället föll den tillbaka på MicroPythons deterministiska mjukvarugenerator Yasmarang .
Den produktionsanpassade konfigurationen satte MICROPY_HW_ENABLE_RNG till noll eftersom Coldcard hade en separat wrapper för hårdvarans slumptalsgenerator. Men biblioteket libngu kontrollerade inte om makrot var aktiverat. Det kontrollerade bara om makrot över huvud taget var definierat .
Eftersom makrot fanns – även om värdet var noll – drog libngu slutsatsen att hårdvaruvägen var tillgänglig. Resultatet blev att koden i stället band sig till MicroPythons mjukvarubaserade rng_get() .
Det sänkte den effektiva entropin, alltså mängden oförutsägbarhet i det nya plånboksfröet, till ungefär 32–40 bitar från de avsedda 128 eller fler bitarna. Det motsvarar omkring fyra miljarder möjliga frövärden – ett sökutrymme som modern hårdvara kan gå igenom .
Frön som skapats utan extra tärningskast från användaren eller en BIP39-lösenfras blev därmed exponerade . Coinkites vd Rodolfo Novak, även känd som NVK, erkände senare misstaget: ”Jag satte uttryckligen MICROPY_HW_ENABLE_RNG till noll eftersom jag trodde att vi inte behövde någon av versionerna, men det är inte så det fungerar” .
| Berörda | Inte berörda enligt den första analysen |
|---|---|
| Coldcard Mk3 med firmware 4.0.1–5.0.3 | Mk4, Q och Mk5 |
| Frön skapade utan användarens egna tärningskast eller BIP39-lösenfras | Frön skapade med egna tärningskast eller lösenfras |
Coinkite utvidgade senare sin varning till vissa firmwareversioner för Mk4, Mk5 och Q efter ytterligare analys. Företaget släppte också akuta firmwareuppdateringar för berörda modeller . Användare bör därför utgå från Coinkites aktuella säkerhetsmeddelande och inte enbart från den första avgränsningen.
Exploiten träffar en central idé inom så kallad self-custody: att användaren själv kan kontrollera sina tillgångar utan en bank eller börs, och att en hårdvaruplånbok ska ge ett robust skydd mot digitala angrepp .
Händelsen visar samtidigt att en hårdvaruplånbok inte är ett magiskt säkerhetsval. Om enheten skapar privata nycklar med för lite slump kan angriparen återskapa nycklarna utan fysisk åtkomst. Binance-grundaren Changpeng Zhao, ofta kallad CZ, varnade offentligt för att inte ens luftgapade hårdvaruplånböcker är felfria om firmware innehåller kritiska buggar .
Incidenten kan också ge nytt bränsle åt frågan om huruvida egen förvaring är värd den praktiska risken för genomsnittliga investerare. Vissa bedömare tror att fler användare kan söka sig tillbaka till reglerade förvaringslösningar och Bitcoin-ETF:er .
Att felet låg i öppen källkod i mer än fem år är dessutom en påminnelse om att transparens inte automatiskt innebär säkerhet. Öppen källkod gör granskning möjlig, men den garanterar inte att subtila fel i exempelvis slumptalsintegration upptäcks i tid. Vissa forskare argumenterar därför för mer automatiserad, AI-baserad kodgranskning som komplement till mänskliga säkerhetsrevisioner .
Slutligen synliggör händelsen en systemisk svaghet: ett enda fel i en hårdvarutillverkares entropihantering kan göra alla plånboksfrön som skapats med samma firmware potentiellt sårbara. Förvaringslösningar med nyckeldelning och flerpartsberäkning, så kallad MPC, kan delvis minska just den typen av gemensam felpunkt.
För en teknisk genomgång, se Blocks ingenjörsrapport och Coinkites tekniska bakgrundsartikel .