Bug nel firmware Coldcard: rubati 1.367 BTC (circa 89 milioni di dollari) sfruttando seed deboli
Un attacco mirato a Coldcard, tra i wallet hardware Bitcoin più diffusi, ha messo in luce una vulnerabilità critica nel processo di generazione delle chiavi. In tre ondate, gli aggressori hanno sottratto circa 1.367 BTC, pari a circa 89 milioni di dollari, svuotando fondi da migliaia di indirizzi. Non si è trattato di phishing o di una violazione di un exchange: l'operazione ha colpito direttamente la generazione interna dei seed, approfittando di un difetto nel firmware che produceva entropia insufficiente.
Che cosa è successo: 89 milioni di dollari in BTC sottratti in tre ondate
Il 30 luglio 2026 è iniziata la sottrazione di Bitcoin da wallet Coldcard. Nella prima ondata sono spariti 594 BTC (circa 38 milioni di dollari) da circa 500 wallet in soli 25 minuti. L'attaccante ha selezionato per primi i wallet di maggiore valore.
La seconda ondata ha portato il totale a 1.082 BTC (circa 70 milioni di dollari) distribuiti su 1.196 indirizzi, nell'arco di 41 minuti. Entro il 2 agosto, le tre ondate hanno raggiunto complessivamente 1.367 BTC (circa 89 milioni di dollari) sottratti da 4.585 indirizzi.
Secondo Chainalysis, la selezione non è stata casuale: l'operatore ha dato priorità ai target più ricchi e avrebbe incassato oltre 30 milioni di dollari nei primi 10 minuti. Un singolo wallet avrebbe perso circa 1,8 milioni di dollari. La dinamica suggerisce che gli indirizzi di alto valore fossero già stati identificati e colpiti con una sequenza deliberata.
La sottrazione ampia è proseguita per quasi 30 ore prima del primo avviso pubblico di Coinkite. Galaxy Research ha poi individuato circa 600 indirizzi ritenuti riconducibili all'attaccante e li ha segnalati agli investigatori. La società ha rilevato pattern operativi simili tra la prima e la seconda ondata, mentre la terza ha utilizzato modalità di raccolta diverse.
L'elemento centrale: nessun accesso ai dispositivi
L'attaccante non avrebbe avuto bisogno di accesso fisico ai Coldcard né di comprometterli da remoto. Il problema risiedeva nei seed generati al momento dell'inizializzazione: un bug nel firmware, presente da cinque anni, produceva seed con troppa poca casualità. Ciò permetteva di ricostruire offline le chiavi private e spostare i fondi.
Cronologia della vulnerabilità e del furto
- 1 marzo 2021: un commit modifica la generazione del seed, sostituendo ckcc.rng_bytes (basato su RNG hardware) con ngu.random.bytes (PRNG software). Fonti: advisory Coinkite; analisi blockchain.
- 17 marzo 2021: viene rilasciato il firmware v4.0.0 con il codice difettoso. Da quel momento, i seed generati su Mk2 e Mk3 avrebbero circa 40 bit di entropia. Fonte: advisory Coinkite.
- 2021–2026: il bug rimane attivo attraverso cinque anni di aggiornamenti, review di sicurezza e un audit assistito da AI, senza essere individuato. Fonti: crypto.news; Bitcoin Magazine.
- 30 luglio 2026 ~12:00 UTC: ondata 1, 594 BTC (~38 milioni di dollari) da ~500 wallet in 25 minuti; oltre 30 milioni di dollari raccolti nei primi 10 minuti; incluso un wallet da ~1,8 milioni di dollari. Fonti: Lookonchain; Block; Chainalysis; 24/7 Wall St.
- 30 luglio 2026: ondata 2, totale 1.082 BTC (~70 milioni di dollari) su 1.196 indirizzi in 41 minuti. Fonti: Galaxy Research; The Hacker News.
- 30–31 luglio 2026: Coinkite pubblica il primo advisory, invita alla migrazione dei seed e rilascia firmware corretti. Fonti: blog Coinkite; Bitcoin Magazine.
- 31 luglio 2026: Block (società di Jack Dorsey) pubblica un'analisi tecnica indipendente sulla vulnerabilità del generatore di numeri casuali. Fonte: analisi Block.
- 1–2 agosto 2026: ondata 3, perdite cumulative a 1.367 BTC (~89 milioni di dollari) su 4.585 indirizzi; Coinkite estende l'advisory includendo Mk4, Mk5 e Q. Fonti: PYMNTS; CyberInsider; Galaxy Research.
- 2–3 agosto 2026: Galaxy Research segnala ~600 indirizzi sospetti a investigatori federali, società di compliance e team di cybersecurity. Fonti: The Hacker News; Galaxy Research.
Il bug: una riga di codice, cinque anni senza rilevamento
Il 1 marzo 2021 una modifica al codice ha cambiato la funzione che genera i seed. In origine ckcc.rng_bytes usava l'RNG hardware del chip STM32. In seguito è stato introdotto ngu.random.bytes, un PRNG software alimentato da input deterministici.
In particolare, il PRNG software usava numero seriale del dispositivo, valori del timer interno e lo storico delle chiamate precedenti all'RNG. Questi input venivano poi trasformati con hashing SHA256d. L'hashing può rimescolare i dati, ma non crea nuova casualità: se il punto di partenza ha solo 2^40 possibilità, anche l'output resta limitato a 2^40.
Per questo, sui dispositivi Mk3 i seed risultavano con circa 40 bit di entropia. Su Mk4, Mk5 e Q, un contributo aggiuntivo dal secure element alzava l'entropia effettiva a circa 72 bit. Entrambi i valori restano inferiori al livello di sicurezza atteso di 128 bit per la generazione dei seed Bitcoin.
Il CEO di Foundation Devices, Zach Herbert, ha indicato che l'errore sarebbe entrato durante una riscrittura del firmware del marzo 2021 legata alla sostituzione del codice GPL con nuove librerie crittografiche, più che a una scelta esplicita di design di sicurezza. Resta il fatto che il difetto è rimasto in produzione per cinque anni e un audit assistito da AI, svolto poche settimane prima dell'attacco, non lo ha individuato.
Come è stato possibile: forza bruta su seed a 40 bit
L'attaccante poteva stimare variabili come UID del dispositivo, stato del timer e sequenza delle chiamate PRNG precedenti. Con questi vincoli era possibile riprodurre offline i flussi di seed candidati. Ogni seed candidato veniva convertito in indirizzi Bitcoin e confrontato con i dati pubblici della blockchain.
Con circa 40 bit di entropia, lo spazio di ricerca è nell'ordine di un trilione di combinazioni. È un numero elevato, ma affrontabile con hardware moderno in tempi pratici, soprattutto restringendo il campo a seed generati nel periodo vulnerabile 2021–2026. Una volta trovato un match con un indirizzo che detiene BTC, l'attaccante può derivare la chiave privata e spazzare i fondi.
Galaxy Research ritiene che le ondate 1 e 2 possano essere attribuite allo stesso operatore, mentre l'ondata 3 mostra un comportamento on-chain diverso, compatibile con un secondo attaccante che avrebbe scoperto e sfruttato autonomamente la falla.
Per Mk4, Mk5 e Q l'entropia stimata (~72 bit) è più alta, ma comunque sotto standard. Block ha descritto l'architettura come una "dangerous fail-open structure", indicando che in alcune condizioni di boot la ricerca potrebbe ridursi a 2^32 valori. Non risultano sfruttamenti su larga scala di questa specifica debolezza.
Chi è esposto: modelli, firmware e livello di rischio
La vulnerabilità dipende dalla versione firmware presente al momento della creazione del seed, non dal firmware attuale. Aggiornare oggi il dispositivo non rende "forte" un seed già creato in passato con entropia debole.
- Mk2 / Mk3: seed generati con v4.0.0 / v4.0.1 fino a v4.1.9, entropia effettiva ~40 bit. Firmware corretto: v4.2.0+. Rischio: massimo; seed già sfruttati attivamente.
- Mk4 / Mk5: seed generati prima di v5.6.0 (standard) / prima di v6.6.0X (Edge), entropia effettiva ~72 bit. Firmware corretto: v5.6.0+ / v6.6.0X+. Rischio residuo; nessuna conferma di sfruttamento su larga scala.
- Q: seed generati prima di v1.5.0Q (standard) / prima di v6.6.0QX (Edge), entropia effettiva ~72 bit. Firmware corretto: v1.5.0Q+ / v6.6.0QX+. Rischio residuo analogo a Mk4/Mk5.
Un'eccezione rilevante riguarda chi, durante la generazione del seed, ha inserito almeno 50 lanci di dadi indipendenti e privati: questa entropia esterna reale neutralizza la debolezza del PRNG. Una passphrase BIP39 forte riduce la probabilità di attacco, ma non "ripara" il seed di base; Coinkite continua a raccomandare la migrazione dei fondi se il seed è stato creato con firmware vulnerabile.
Valutazione del rischio e azioni consigliate
- Seed creato prima della modifica di marzo 2021: in genere non coinvolto; nessuna migrazione necessaria per questo bug.
- Seed creato su firmware vulnerabile con almeno 50 lanci di dadi privati: rischio minimo; verificare i propri appunti di setup e seguire le indicazioni ufficiali.
- Seed creato su firmware vulnerabile senza sufficiente entropia da dadi: trattare il seed come esposto; aggiornare, creare nuovo seed e migrare i fondi.
- Seed con passphrase BIP39 forte: rischio ridotto, ma seed debole; migrare verso un nuovo seed.
- Multisig con una chiave derivata da seed Coldcard vulnerabile: il rischio dipende dalla soglia di firma; ruotare ogni chiave coinvolta e rivedere la policy multisig.
Altri produttori, tra cui Trezor, Ledger e Block (Bitkey), hanno dichiarato di usare sistemi di generazione dell'entropia differenti: questa specifica vulnerabilità non riguarda i seed creati con quei dispositivi.
La risposta di Coinkite: patch e critiche
Dopo l'attacco, Coinkite ha pubblicato il primo advisory tra il 30 e il 31 luglio, circa 30 ore dopo l'inizio dello sweep. Ha rilasciato firmware corretti per i modelli coinvolti: v4.2.0 per Mk3, v5.6.0 per Mk4 e Mk5, v1.5.0Q per Q. Sono stati pubblicati anche dettagli tecnici e una guida alla migrazione.
Il 1 agosto l'advisory è stato aggiornato per riconoscere che anche Mk4, Mk5 e Q avevano entropia ridotta. Pur essendo stati colpiti soprattutto seed Mk2/Mk3, i modelli successivi restavano sotto lo standard atteso di 128 bit.
Le critiche si concentrano su due aspetti: il bug è rimasto inosservato per cinque anni nonostante review, release orientate alla sicurezza e un audit assistito da AI; l'avviso pubblico è arrivato con ritardo mentre le sottrazioni proseguivano. Il ricercatore Kevin Loaec (Wizardsardine) invita inoltre a considerare esposti i multisig che includono chiavi derivate da seed Coldcard vulnerabili, un punto che l'advisory non affronta in modo esaustivo.
Come migrare i fondi: procedura operativa
Aggiornare il firmware non basta per proteggere un seed già creato con entropia debole. Per mitigare il rischio occorre generare un nuovo seed e trasferire i BTC.
1) Aggiornare il firmware Coldcard. Installare l'ultima versione corretta per il proprio modello e canale di rilascio, scaricandola dal sito ufficiale Coinkite.
2) Generare un seed completamente nuovo. Crearlo sul dispositivo aggiornato, senza importare o ripristinare il vecchio. Per aumentare l'entropia, usare almeno 50 lanci di dadi indipendenti e privati.
3) Verificare il backup del nuovo seed. Annotare correttamente le parole e completare la verifica sul dispositivo. Generare poi un indirizzo di ricezione e controllare che coincida tra software wallet e schermo Coldcard.
4) Trasferire tutti i Bitcoin. Inviare l'intero saldo controllato dal vecchio seed a indirizzi derivati dal nuovo seed, verificando destinazione e dettagli sul Coldcard prima della firma.
5) Confermare la migrazione. Controllare le conferme tramite un block explorer affidabile, verificare che i vecchi indirizzi siano a saldo zero e che il nuovo wallet mostri il totale trasferito.
6) Distruggere in sicurezza il vecchio backup del seed. Farlo solo dopo conferme e verifica di accesso al nuovo seed; eliminare copie fisiche e digitali del seed compromesso.
La migrazione richiede transazioni on-chain: considerare le fee di rete e, in caso di urgenza, evitare fee troppo basse. Per il multisig, ogni chiave derivata da seed Coldcard vulnerabile va ruotata; occorre aggiornare la configurazione e validare la nuova policy prima di spostare importi rilevanti.
Implicazioni per la self-custody
L'autocustodia richiede due condizioni: controllare le chiavi private e generarle con casualità reale e di qualità. Il caso Coldcard evidenzia che si può mantenere il controllo delle chiavi e perdere comunque i fondi se la generazione è prevedibile.
L'episodio è stato indicato come il terzo grande fallimento recente legato a PRNG nel settore, dopo Milk Sad (2023) e Ill Bloom (2026). In tutti i casi, la debolezza era nel momento della generazione delle chiavi, un passaggio difficilmente verificabile dall'utente finale.
Sul fronte open source vs closed source, il fatto che il codice del firmware fosse accessibile e nonostante ciò il bug sia rimasto nascosto per cinque anni mostra che la visibilità del codice non è garanzia automatica di sicurezza, pur restando un prerequisito per audit indipendenti. CoinDesk ha inoltre riportato che eventi di questo tipo potrebbero spingere alcuni investitori verso ETF su Bitcoin: si riducono i rischi operativi di gestione delle chiavi, ma si trasferisce il rischio a un custode regolamentato.
Blockaid ha segnalato che nella prima metà del 2026 molte perdite crypto derivavano da chiavi compromesse e fallimenti di sicurezza operativa più che da exploit di smart contract. In questa cornice, l'attacco a Coldcard colpisce la generazione delle chiavi, non Bitcoin.
Nota: il presente contenuto è informativo ed educativo e non costituisce consulenza finanziaria, di investimento, legale o di sicurezza. Effettuare sempre le proprie verifiche prima di decisioni legate alle criptovalute.
Domande e risposte
- Il mio Coldcard è compromesso?
Un seed può essere compromesso se è stato generato su Mk2 o Mk3 con firmware v4.0.0–v4.1.9 senza sufficiente entropia da lanci di dadi. Per Mk4, Mk5 e Q, i seed creati prima delle patch hanno circa 72 bit di entropia: non c'è conferma di sfruttamento diffuso, ma restano sotto lo standard atteso. Aggiornare, creare un nuovo seed e migrare i fondi.
- L'aggiornamento del firmware risolve il problema?
No. Corregge solo la generazione futura dei seed. Per un seed già creato con entropia debole è necessario generare un nuovo seed su firmware corretto e trasferire tutti i BTC.
- Ledger e Trezor sono coinvolti?
No. Ledger, Trezor e Block (Bitkey) hanno dichiarato di usare metodi diversi per la generazione dell'entropia; questa specifica vulnerabilità Coldcard non li riguarda.
- Quanti Bitcoin sono stati rubati?
Al 2 agosto 2026 risultano sottratti circa 1.367 BTC, pari a circa 89 milioni di dollari, in tre ondate, su 4.585 indirizzi. Le indagini sono in corso e le stime potrebbero aggiornarsi.
- Chi è l'attaccante?
Non è stato identificato. Galaxy Research ritiene possibile un unico operatore per le ondate 1 e 2; l'ondata 3 mostra un comportamento diverso e potrebbe indicare un secondo attaccante. Sono stati segnalati circa 600 indirizzi sospetti agli investigatori.
- I lanci di dadi mi proteggono?
Sì, se sono stati effettuati almeno 50 lanci di dadi indipendenti e privati durante la generazione del seed. Questa entropia esterna reale non viene ridotta dal generatore difettoso. Coinkite indica un rischio minimo per chi ha completato correttamente questa procedura.