Faille RNG COLDCARD : 88 millions de dollars de Bitcoin volés - Analyse complète et guide de migration
Théophane Villedieu
Le 30 juillet 2026 restera une date charnière dans l’histoire de la sécurité des cryptomonnaies. En l’espace de 41 minutes, environ 1 083 BTC, soit 70,2 millions de dollars, ont été drainés de 1 196 portefeuilles. Quelques jours plus tard, le bilan atteignait 1 367 BTC, pour un préjudice total estimé à 88,6 millions de dollars. L’origine de ce désastre ? Une faille RNG COLDCARD dans le générateur de nombres aléatoires du firmware, qui a permis à un attaquant de reconstituer des milliers de seeds et de vider les wallets correspondants. Découvrez l’origine technique de cette vulnérabilité sans précédent, le déroulement de l’attaque, les modèles concernés et les étapes précises pour sécuriser vos actifs.
La faille RNG COLDCARD : aux racines du drame
Un RNG matériel contourné par une erreur logicielle
Le cœur du problème réside dans une erreur d’intégration logicielle au sein du firmware COLDCARD. Le microcontrôleur STM32 utilisé par l’appareil intègre un True Random Number Generator (TRNG) matériel certifié AIS-31, une norme allemande reconnue pour la génération de nombres aléatoires cryptographiquement sécurisés. C’est ce composant que le firmware était censé utiliser pour générer les seeds.
Cependant, une vérification incorrecte dans le code a empêché l’utilisation de ce TRNG. À la place, le système s’est rabattu sur un générateur logiciel déterministe : Yasmarang, issu de l’environnement MicroPython. Comme le souligne le rapport de Block (anciennement Square), « le firmware COLDCARD contient une erreur d’intégration RNG qui force ngu.random à utiliser le générateur déterministe Yasmarang de MicroPython au lieu du RNG matériel STM32 ».
Yasmarang est un Pseudo-Random Number Generator (PRNG). Contrairement à un TRNG qui exploite des phénomènes physiques imprévisibles (bruit thermique, jitter d’horloge), un PRNG produit une séquence mathématique déterministe. Si l’état initial (la « graine ») est connu ou peut être deviné, la totalité de la séquence peut être reproduite. Dans le cas de COLDCARD, cette graine était composée de l’identifiant unique du microcontrôleur et de valeurs de temporisation système, des sources que Block qualifie de « non cryptographiquement sécurisées et potentiellement observables ou reconstituables par un attaquant ».
De la théorie à la pratique : comment l’attaquant a exploité la faille
L’attaquant n’a pas eu besoin d’accéder physiquement aux wallets ni d’intercepter des communications. La méthode est purement algorithmique et s’est déroulée en plusieurs phases :
- Reconnaissance et ciblage : L’attaquant a identifié les adresses Bitcoin générées pendant la période de vulnérabilité. En analysant la blockchain et en croisant les dates de création des transactions avec les versions de firmware publiées par Coinkite, il a pu établir une liste d’adresses potentiellement exposées.
- Génération hors ligne : En exécutant le même algorithme Yasmarang avec des paramètres identiques (ID du microcontrôleur, timings système), l’attaquant a généré un très grand nombre de seeds potentielles. Pour chaque seed, il a calculé l’adresse Bitcoin correspondante.
- Correspondance : Il a comparé ces adresses générées hors ligne avec les adresses visibles sur la blockchain. Dès qu’une correspondance était trouvée avec une adresse possédant un solde, la seed était considérée comme compromise.
- Exécution : Une fois la seed confirmée, l’attaquant importait la seed dans un wallet logiciel et vidait les fonds en quelques secondes via une transaction automatisée.
Cette méthode explique pourquoi l’attaque a été si rapide et si efficace : il n’y a eu aucune effraction, aucun malware, simplement une exploitation mathématique d’un défaut de conception.
« Cela ressemble à un outil automatisé dépensant des clés qu’il détenait déjà, et non à des propriétaires déplaçant leurs fonds. » - Galaxy Research
Chronologie de l’attaque : une opération chirurgicale de 88 millions de dollars
Les trois vagues d’attaques identifiées par Galaxy Research
La firme d’analyse Galaxy Research a été la première à tirer la sonnette d’alarme. Elle a retracé l’attaque en trois vagues distinctes, révélant une opération d’une précision redoutable.
- Vague 1 (30 juillet) : 1 083 BTC (70,2 millions de dollars) dérobés sur 1 196 adresses en seulement 41 minutes. Le taux de frais était identique pour chaque transaction : 30 satoshis par vbyte, soit 30 à 75 fois supérieur à la médiane de la semaine (0,4-1,0 sat/vB). Aucune transaction ne comportait de monnaie rendue (change output).
- Vagues 2 et 3 (1er août) : Le total grimpe à 1 367 BTC, soit environ 88,6 millions de dollars, et le nombre d’adresses compromises atteint 4 585.
L’analyse des transactions montre une signature unique : un taux de frais rigoureusement identique et l’absence totale de monnaie rendue. Pour Galaxy Research, cela ne fait aucun doute : il s’agit d’un script automatisé, et non d’utilisateurs paniqués déplaçant leurs fonds.
Un ciblage précis des portefeuilles à forte valeur
Chainalysis a apporté une couche d’analyse supplémentaire en démontrant que l’attaque n’était pas aléatoire. L’attaquant a priorisé les adresses les plus riches, suggérant une phase de reconnaissance approfondie en amont.
- En seulement dix minutes, près de 30 millions de dollars ont été drainés.
- Une seule transaction a porté sur 1,8 million de dollars, provenant d’une unique victime.
Ces éléments indiquent que l’attaquant avait cartographié les adresses vulnérables et préparé son attaque bien avant de passer à l’action. Le timing est également révélateur : l’attaque a eu lieu environ 30 heures avant que Coinkite ne divulgue publiquement la faille, ce qui suggère que l’attaquant a agi dans une fenêtre de vulnérabilité qu’il connaissait parfaitement.
Quels modèles COLDCARD sont concernés par la faille RNG ?
Coinkite a publié un avis de sécurité détaillant les versions de firmware impactées. Voici un récapitulatif complet des modèles concernés et des correctifs associés :
| Modèle | Firmware impacté | Correctif disponible |
|---|---|---|
| COLDCARD Mk2 / Mk3 | 4.0.1 à 4.1.9 | 4.2.0 ou ultérieur |
| COLDCARD Mk4 / Mk5 | Avant 5.6.0 (Standard) / Avant 6.6.0X (Edge) | 5.6.0+ (Standard) / 6.6.0X+ (Edge) |
| COLDCARD Q | Avant 1.5.0Q (Standard) / Avant 6.6.0QX (Edge) | 1.5.0Q+ (Standard) / 6.6.0QX+ (Edge) |
Produits non impactés : Coinkite précise que les produits TAPSIGNER, OPENDIME et SATSCARD ne sont pas concernés, car ils utilisent des bases de code différentes. Coinkite a également indiqué avoir détruit tous les appareils en attente d’expédition contenant le firmware vulnérable, une mesure de précaution radicale mais nécessaire.
Bon à savoir : La faille ne concerne que la génération de la seed. Si vous avez importé une seed générée sur un autre appareil (Ledger, Trezor, etc.) dans votre COLDCARD, vos fonds ne sont pas exposés par cette vulnérabilité spécifique. Toutefois, la prudence reste de mise.
Procédure de migration : sécuriser vos fonds après la faille
Si vous possédez un COLDCARD et que votre seed a été générée sur un firmware vulnérable, l’urgence est de migrer vos fonds. Mettre à jour le firmware ne répare pas une seed déjà générée. Voici la procédure recommandée, étape par étape, pour une migration sécurisée.
Étape 1 : Vérification et mise à jour du firmware
Connectez votre COLDCARD et vérifiez la version du firmware. Si elle figure dans la liste des versions impactées, mettez-la à jour immédiatement vers la version corrigée. La mise à jour du firmware est une condition préalable, car elle corrige le RNG pour la génération de la nouvelle seed.
Étape 2 : Génération d’une nouvelle seed phrase
Une fois le firmware corrigé installé, utilisez la fonction de réinitialisation de l’appareil pour générer une nouvelle seed phrase. Ne réutilisez pas l’ancienne seed. La nouvelle seed doit être générée sur l’appareil sain. Assurez-vous que le RNG matériel est bien utilisé (un indicateur dans les paramètres système permet de confirmer que le TRNG est actif sur les versions récentes du firmware).
📌 Astuce de sécurité : Pour une entropie maximale, vous pouvez combiner la seed générée par l’appareil avec des lancers de dés physiques. Coinkite précise que les seeds complétées par au moins 50 lancers de dés justes, indépendants et privés ne sont pas considérées comme à risque par cette seule faille. L’utilisation d’une phrase de passe BIP-39 forte (12 mots minimum, générée aléatoirement) ajoute également une couche de sécurité significative. Attention : cela ne répare pas la faille, mais rend l’exploitation beaucoup plus difficile.
Étape 3 : Transférer les fonds en toute sécurité
- Test : Envoyez une petite transaction test (quelques milliers de sats) de l’ancienne adresse vers la nouvelle. Attendez plusieurs confirmations.
- Vérification : Assurez-vous que le nouveau wallet affiche correctement le solde et que la transaction est bien confirmée.
- Transfert complet : Envoyez le reste de vos fonds. Pour éviter de multiples transactions et des frais élevés, vous pouvez effectuer une seule transaction regroupant tous vos UTXOs (consolidation).
- Sauvegarde : Conservez l’ancienne sauvegarde (seed phrase papier ou métal) jusqu’à ce que la migration soit entièrement confirmée et que vous ayez vérifié l’absence d’activité suspecte sur l’ancienne adresse.
- Destruction : Une fois la migration confirmée, détruisez physiquement l’ancienne seed de manière sécurisée (déchiqueteuse, feu, acide).
Erreurs courantes à éviter
- Ne pas vérifier la nouvelle seed : Assurez-vous que la seed générée est correctement sauvegardée et vérifiée avant d’envoyer des fonds.
- Envoyer tous les fonds sans test : Une erreur de saisie d’adresse ou un problème de wallet peut être désastreux. Le test est impératif.
- Utiliser un wallet chaud pour recevoir les fonds de la migration : La nouvelle seed doit être générée sur le COLDCARD lui-même. Transférer vers un wallet logiciel vous expose à d’autres risques.
Leçons de sécurité pour l’écosystème des hardware wallets
L’importance cruciale du RNG matériel (TRNG)
Cette faille RNG COLDCARD est un rappel brutal que la sécurité d’un wallet dépend entièrement de la qualité de son générateur de nombres aléatoires. Un PRNG logiciel est déterministe : si l’attaquant connaît ou peut deviner l’état initial, il peut reproduire l’intégralité de la séquence. C’est exactement ce qui s’est passé ici.
Un TRNG matériel, en revanche, exploite des phénomènes physiques imprévisibles pour générer du hasard. Les wallets de nouvelle génération doivent impérativement utiliser un TRNG certifié et audité. Dans la pratique, nous avons observé que de nombreux utilisateurs ignorent ce détail technique fondamental, se fiant aveuglément à la réputation de la marque.
Transparence et divulgation responsable
La gestion de la crise par Coinkite mérite d’être analysée. La divulgation publique a eu lieu environ 30 heures après l’attaque initiale. Bien que ce délai puisse sembler long, il est cohérent avec une procédure de divulgation responsable, visant à préparer un correctif avant d’informer les attaquants potentiels. Toutefois, cet incident pose la question de l’audit des firmware. Comment une erreur d’intégration aussi critique a-t-elle pu passer inaperçue pendant des années ?
Cela souligne les limites des audits de sécurité, même pour des projets réputés. Un audit ne peut pas couvrir 100 % des chemins d’exécution, comme l’illustre la découverte d’une faille zero-day du noyau Linux par une IA. La solution réside dans la transparence et les tests continus. Les utilisateurs doivent exiger des projets de hardware wallets :
- Des audits de code réguliers par des firmes indépendantes spécialisées en cryptographie.
- Un processus de mise à jour firmware simple, sécurisé et vérifiable.
- Une communication transparente et rapide en cas de vulnérabilité.
La responsabilité de l’utilisateur
Enfin, cet incident nous rappelle que l’utilisateur est le dernier rempart de sa sécurité. La migration des fonds après une mise à jour critique n’est pas une option, c’est une obligation. Il est recommandé de suivre les comptes officiels des fabricants de vos wallets et de vérifier régulièrement les avis de sécurité, tout comme vous évalueriez les prestataires de pare-feu externalisé pour protéger votre infrastructure réseau. L’automatisation de la vérification des firmware (via des outils comme les applications officielles ou les gestionnaires de wallets) peut grandement faciliter cette veille.
« Le firmware COLDCARD contient une erreur d’intégration RNG qui force
ngu.randomà utiliser le générateur déterministe Yasmarang de MicroPython au lieu du RNG matériel STM32. » - Block
Conclusion : une vigilance de tous les instants
Le vol de 88,6 millions de dollars via la faille RNG COLDCARD est bien plus qu’un simple incident de sécurité. C’est un électrochoc pour l’industrie des cryptomonnaies. Il démontre que la souveraineté financière offerte par Bitcoin ne tient qu’à un fil : celui de la qualité du code de votre wallet. La confiance aveugle dans une marque ou un produit n’est pas une stratégie de sécurité viable.
Les actions à retenir sont claires : vérifiez votre firmware, migrez vos fonds si vous êtes concerné, et diversifiez vos solutions de stockage. La sécurité est un processus dynamique, pas un état statique. Restez vigilant, formez-vous aux aspects techniques de la conservation, et n’oubliez jamais que dans l’univers des cryptomonnaies, la responsabilité ultime de la sécurité vous incombe. N’attendez pas d’être une victime : agissez dès maintenant.