Présentation du problème
Un développeur a découvert une faille de sécurité dans le firmware de la Coldcard, une carte de sécurité pour Bitcoin. La faille est due à une mauvaise configuration de la génération de nombres aléatoires, ce qui a permis à des attaquants de prédire les clés de sécurité.
Contexte technique
La Coldcard utilise un microcontrôleur STM32, qui dispose d'un générateur de nombres aléatoires matériel. Cependant, le développeur a désactivé ce générateur en définissant la variable `MICROPY_HW_ENABLE_RNG` à 0. Cela a entraîné l'utilisation d'un générateur de nombres aléatoires logiciel moins sécurisé, appelé Yasmarang.
#define MICROPY_HW_ENABLE_RNG (0)
Le développeur a également tenté de remplacer les fonctions de génération de nombres aléatoires par ses propres implémentations, mais cela a entraîné des erreurs de compilation dues à des définitions de variables conflictuelles.
Implications et limites
La faille de sécurité a été découverte en analysant l'historique des commits du firmware de la Coldcard. Les développeurs ont constaté que les messages de commit étaient très courts et ne fournissaient pas suffisamment d'informations sur les modifications apportées au code. Cela a rendu difficile la compréhension des changements et a contribué à la faille de sécurité.
La Coldcard utilise un langage de programmation Python pour l'application, qui appelle des fonctions C pour interagir avec le matériel. Cependant, les fonctions de génération de nombres aléatoires utilisées par l'application Python ne sont pas les mêmes que celles qui ont été remplacées par le développeur. Cela signifie que la faille de sécurité n'a pas été corrigée, même si les fonctions de génération de nombres aléatoires ont été modifiées.
seed = random.bytes(32)
Conclusion
La faille de sécurité de la Coldcard est un exemple de la manière dont une mauvaise configuration et une mauvaise gestion du code peuvent entraîner des problèmes de sécurité graves. Il est essentiel de suivre les meilleures pratiques de développement et de tester soigneusement les modifications apportées au code pour éviter ce type de failles.