En bref

  • Coinkite indique qu'une erreur de compilation a entraîné la génération des seeds sur ses portefeuilles matériels Coldcard à partir d'un logiciel de secours au lieu du générateur matériel.
  • L'entreprise pense qu'un attaquant a utilisé l'IA sur son code open source, et affirme que son propre audit IA effectué quelques semaines auparavant n'a rien détecté.
  • Chaque modèle actuel est affecté dans une certaine mesure, et mettre à jour le firmware ne répare pas une seed déjà créée.

Coinkite estime qu'un attaquant a utilisé l'IA pour découvrir une faille ayant coûté des dizaines de millions de dollars en Bitcoin aux propriétaires de ses portefeuilles matériels Coldcard et affirme que son propre audit IA sur ce même code, réalisé quelques semaines auparavant, n'a rien détecté. 

Le fabricant de portefeuilles matériels a publié un avis concernant son Mk3 et une analyse technique jeudi, après avoir appris que les seeds générés par ses appareils étaient bien plus faciles à deviner que prévu.

Les pertes liées à la faille, qui a été exploitée tôt vendredi, sont estimées à 594 BTC, environ 38 millions de dollars. Les fonds ont été vidés de près de 500 portefeuilles en 25 minutes, et 562 BTC ont ensuite été consolidés dans une adresse unique.

Coinkite indique qu'il doit supposer "qu'une personne a utilisé l'IA pour examiner les versions précédentes de notre firmware" afin de découvrir la faille. L'entreprise affirme avoir utilisé l'un des meilleurs modèles disponibles sur son propre code il y a quelques semaines, et le modèle "n'a pas trouvé ce bug ni rien de grave." Les attaquants et les défenseurs disposent des mêmes outils, écrit-elle, mais cette fois "cela ne nous a pas aidés, et n'a aidé que les malfaiteurs."

Ce qui n'a pas fonctionné

Le firmware de Coldcard appelle une fonction pour extraire de l'aléatoire, et deux implémentations de celle-ci étaient présentes dans la base de code avec des signatures identiques : le générateur matériel développé par Coinkite, et un logiciel de secours hérité de MicroPython. Un garde préprocesseur vérifiait seulement si un paramètre était défini, sans tester sa valeur, donc la compilation s'est faite contre le logiciel de secours sans avertissement. La génération du seed reposait dessus depuis la migration de mars 2021.

Tous les modèles actuels sont concernés à divers degrés. Coinkite estime que l'espace effectif de recherche pour une seed Mk3 est d'environ 40 bits, contre les 128 bits censés être disponibles. L'entropie supplémentaire fournie par les éléments sécurisés sur les Mk4, Q et Mk5 porte leur niveau à environ 72 bits, ce qui, selon la société, améliore sensiblement la situation sans atteindre la cible. Tapsigner, Opendime et Satscard utilisent un code différent et ne sont pas affectés.

Ce que les propriétaires doivent faire

Coinkite a publié un correctif d'urgence, version 5.6.0 pour les Mk4 et Mk5, et 1.5.0Q pour le Q. La mise à jour ne répare pas un seed déjà généré sur un firmware affecté. Les propriétaires doivent générer un nouveau seed sur un matériel corrigé, et la société recommande une passphrase BIP-39 robuste, au moins 99 lancers de dés, ou les deux. Les propriétaires de Mk3, dont le modèle n'est plus supporté, sont orientés vers une migration distincte.