Coldcard Exploit : un PRNG déterministe vide 88 M$ en BTC

Le 1er août 2026, environ 1 196 adresses bitcoin ont été vidées lors d'une opération coordonnée. Pas de phishing. Pas de PSBT malveillant signé. Pas d'erreur utilisateur au sens traditionnel du terme. L'exploit Coldcard qui a drainé environ 88 millions de dollars en BTC n'a jamais touché un seul appareil au moment du vol, selon le reportage de CoinDesk sur l'incident.
La cause profonde est pire que toutes les analyses que j'ai vues dans les 24 premières heures. Il s'agissait d'une faille dans le firmware d'un portefeuille matériel, introduite en 2021, qui a silencieusement remplacé le générateur de nombres aléatoires matériel par une routine pseudo-aléatoire logicielle. Chaque graine générée sous cette version était déterministe. Chaque adresse dérivée de ces graines était, en principe, précalculable par quiconque avait fait de la rétro-ingénierie sur le bug.
Ce n'est pas un hack. C'est un décalage de cinq ans entre le commit et la conséquence.
Ce qu'a réellement fait le bug de firmware Coinkite
La version défectueuse, comme le détaille The Hacker News, acheminait les appels d'entropie vers un PRNG logiciel amorcé à partir d'un état petit et devinable, au lieu du RNG matériel de la puce SE. Les utilisateurs n'avaient aucun moyen de détecter la substitution. L'appareil démarrait, affichait les écrans de configuration attendus, produisait une graine de 24 mots, et semblait identique à un portefeuille correctement généré.
Les graines qu'il produisait vivaient dans un espace de recherche de peut-être quelques milliards de possibilités. Ce n'est pas un portefeuille. C'est un ticket de tombola.
Lorsque l'attaquant (ou, plus vraisemblablement, le chercheur qui a découvert cela et n'a pas procédé à une divulgation responsable) a commencé à parcourir l'espace en le confrontant à l'ensemble UTXO le 1er août, le drainage a pris des heures, pas des mois.
Pourquoi le chiffre de 1 196 adresses bitcoin drainées est important
1 196, c'est peu en termes absolus et énorme en termes de signal. Cela délimite la population des utilisateurs qui ont généré une graine sur cette fenêtre de firmware précise et n'ont jamais effectué de rotation. C'est une affirmation vérifiable et falsifiable sur le rayon d'impact, et l'article de TechSpot confirme que les appareils concernés remontent à une période d'expédition étroite.
Si vous avez généré votre graine sur un firmware différent, ou si vous avez effectué une rotation après une mise à jour du firmware, vous êtes très probablement hors de danger. Si vous avez généré sur cette version et n'avez jamais déplacé vos fonds, vous étiez déjà dépensé, vous ne le saviez simplement pas encore.
Un détail discret : certains des UTXO drainés étaient restés intacts depuis 2021. Cinq ans de « mes clés, mes coins », et les clés n'ont jamais vraiment été les vôtres.
Le problème du PRNG déterministe pour Bitcoin est ancien et continue de se répéter
Cette classe de bug a une longue et embarrassante histoire. Le SecureRandom d'Android en 2013 a fait perdre des BTC aux gens de la même façon. Le bug du PRNG d'OpenSSL sous Debian en 2008 a paralysé les clés SSH pendant deux ans avant que quiconque ne le remarque. À chaque génération, nous réapprenons que l'entropie est la seule chose que l'on ne peut pas auditer en regardant la sortie.
Un nombre aléatoire de 256 bits bien formé et un nombre déterministe de 256 bits semblent identiques à l'inspection. Vous devez auditer la source, pas l'échantillon. C'est tout le jeu.
Les portefeuilles matériels vendent la promesse que l'élément sécurisé s'en charge pour vous. Quand le firmware contourne le SE, vous avez toutes les contraintes du stockage à froid sans aucune des garanties. Le pire des deux mondes.
Le débat self-custody vs ETF n'est pas celui que les gens croient
Voici mon opinion, et je l'assume : la conversation sur la self-custody par rapport aux ETF a été présentée comme une question idéologique alors qu'il s'agit en réalité d'une question de chaîne d'approvisionnement.
Un ETF BTC spot n'a qu'une surface d'attaque qui m'importe : la sécurité opérationnelle du dépositaire. Cette surface est auditable par les régulateurs, assurable, et gérée par des personnes dont le travail à plein temps est de ne pas perdre de coins. Quand ça échoue, quelqu'un signe un chèque.
La self-custody a une chaîne plus longue : fournisseur de puce, pipeline de compilation du firmware, signature de la version, itinéraire de livraison, OPSEC de l'utilisateur final, hygiène des sauvegardes. Qu'un maillon défaille et il n'y a pas de chèque. Le drainage Coldcard est le moment Terra de cette thèse, non pas parce que la self-custody est morte, mais parce que le discours maximaliste « gardez simplement vos propres clés » doit mûrir.
Les deux modèles comportent de vrais risques. Prétendre que l'un d'eux est sans risque, c'est ce qui a conduit au drainage de 1 196 adresses.
Ce qui change réellement après l'exploit Coldcard
Quelques points que je pense vont (et devraient) évoluer :
- Les builds de firmware reproductibles deviennent incontournables. Si vous ne pouvez pas recompiler le binaire à partir des sources et le comparer octet par octet, vous faites confiance à une signature, pas à un code source.
- L'attestation d'entropie post-génération. L'appareil devrait signer une preuve qu'une graine donnée provient du SE, et non d'un logiciel. Ce n'est pas difficile. Coinkite pourrait le livrer en un trimestre.
- Les vérifications de cohérence des graines par des tiers. Des outils tiers qui peuvent, sans voir votre graine, vérifier que son chemin de dérivation aboutit à une distribution cohérente avec une vraie aléatoire.
- Des produits d'assurance pour la self-custody. Pas le genre parodique. Une vraie souscription qui exige un firmware attesté et dont la couverture est actualisée à mesure que les versions vieillissent.
Rien de tout cela ne rend les portefeuilles matériels obsolètes. Cela les rend de niveau entreprise, ce qu'ils ont toujours prétendu être.
La lecture inconfortable pour le reste d'entre nous
Chez LCX, nous consacrons une part disproportionnée du temps d'ingénierie à des choses qui semblent invisibles aux utilisateurs : cérémonies de clés HSM, pipelines de compilation déterministes, audits d'entropie sur tout chemin de code qui touche une clé privée. C'est un travail ennuyeux. C'est aussi la différence entre un titre de presse et un mardi ordinaire.
L'incident Coldcard résonne de la même façon que les commentaires du PDG d'OpenZeppelin sur les audits DeFi plus tôt cette année. La pile d'audit que nous avons héritée était conçue pour un monde où le code que vous livriez était le code que vous exécutiez. Ce n'est plus ce monde, si tant est qu'il l'ait jamais été.
Le stockage à froid était censé être la réponse ennuyeuse et correcte. Il s'avère que l'ennuyeux a besoin de beaucoup plus d'échafaudages que nous ne l'admettions.