Un coffre-fort à bitcoins percé – Une faille 0day incroyable révélée chez Ledger
Ledger pris de court par une faille – Le développeur répondant au pseudo de Monokh a rendue publique une importante faille de sécurité chez les appareils de Ledger. Cette vulnérabilité peut être utilisée pour voler les fonds de l’utilisateur.
Présentation de l’attaque
L’attaquant peut transférer les bitcoins d’un utilisateur, en lui donnant l’impression qu’il réalise une transaction d’un montant plus faible dans une autre cryptomonnaie. Les cryptomonnaies concernées sont les forks de Bitcoin (ex. : Litecoin, Bitcoin Cash, etc.)
Le problème est le suivant : l’appareil de Ledger expose la clé publique Bitcoin (mainnet) de l’utilisateur et la fonctionnalité de signature en dehors de l’application dédiée.
Pour manipuler une crypto donnée, l’utilisateur doit installer l’application correspondante sur son appareil. Ainsi, il est courant de se retrouver avec plusieurs applis sur son Ledger. Il faut donc que les applications soient isolées. Cela signifie qu’une seule application doit être déverrouillée pour communiquer avec le réseau.
Le canal de communication avec l’extérieur permet d’utiliser diverses fonctions, comme :
- L’export des clés publiques ;
- La signature des messages ;
- La confirmation des transactions.
Les applications verrouillées doivent donc être intouchables par les messages externes. Malheureusement, ce n’est pas toujours le cas. En effet, pour Bitcoin et ses forks, l’appareil expose ces fonctions.
Déroulé de l’attaque
Le proof of concept se trouve sur le dépôt Github de Monokh.
Une fois l’application déverrouillée (par exemple, Litecoin), l’attaquant pourra créer une transaction Bitcoin dûment signée lorsque l’utilisateur confirmera sa transaction Litecoin.
- Tout d’abord, ouvrir l’application Litecoin.
- En utilisant la fonction getWalletPublicKey(’84’/0’/0’/’).publicKey, il est possible de retrouver les adresses Bitcoin Segwit de l’utilisateur.
- Ensuite, il faut réunir les UTXO, et programmer la transaction Bitcoin pour dépenser les sorties.
- Puis, il faut envoyer la requête createPaymentTransactionNew(…) afin de demander à l’utilisateur de confirmer la transaction.
- Enfin, l’attaquant pourra recevoir la transaction Bitcoin signée par l’utilisateur à son insu.
L’appareil va donc demander à l’utilisateur de confirmer sa transaction Litecoin, mais ce sera la transaction Bitcoin de l’attaquant qui sera signée et diffusée.
Cela pose un gros problème de sécurité. Ce déverrouillage intempestif permet à un attaquant de connaître toutes les clés publiques Bitcoin associées au wallet et également de mener l’attaque décrite ci-dessus.
Monokh propose plusieurs exemples pour mener cette attaque :
- Vous êtes invité à essayer un nouveau service sur le testnet de Bitcoin, et ce dernier va en fait transférer les « vrais » bitcoins de votre portefeuille.
- Vous échangez des coins de faible valeur sur une plateforme d’échange douteuse. L’exchange peut lire vos soldes Bitcoin et, si l’opportunité se présente, voler vos BTC.
- Vous pourriez être ciblé avec une version modifiée de Ledger Live, qui envoie vos bitcoins au lieu d’altcoins. Par exemple, lors d’un échange de pair à pair d’altcoins.
Comment se protéger ?
Les applications doivent donc être complètement isolées au regard des chemins de dérivation. De même, aucune information sur les clés publiques de l’utilisateur ou les fonctionnalités de signature ne devraient être exposées.
En l’état :
- Les utilisateurs des appareils de Ledger ne devraient pas utiliser d’applications dédiées aux altcoins concernées ;
- Ou sinon, ils devraient n’utiliser qu’une seule application par appareil.
La réponse de Ledger
Monokh a informé Ledger de cette faille de sécurité en janvier 2019. Ledger ne l’aurait pas prise au sérieux :
- Le problème a été réduit à un problème de confidentialité ;
- Ledger n’a pas communiqué sur ses éventuels correctifs ;
- Ledger aura attendu un an et demi pour reconnaître le problème ;
- Monokh n’a eu aucune réponse et la communication avec Ledger fut très lacunaire.
Le développeur semble dépité du manque de sérieux dont a fait preuve l’entreprise face à une brèche de sécurité aussi grave. Le fait d’avoir rendu toutes ces informations publiques a fini par faire réagir le fabricant de hardware wallets.
Dans ce bulletin daté du mardi 4 août, Ledger Donjon décrit brièvement le problème : les chemins de dérivation sont trop permissifs.
Ledger insiste sur le fait que ce design est un compromis entre sécurité maximale et confort d’utilisation. Enfin, l’entreprise assure que le problème sera réglé. L’utilisateur sera informé lorsqu’une application correspondant à un fork de Bitcoin tente d’effectuer une dérivation sur un chemin inhabituel. Dans le futur, si cela ne pose pas de problème de compatibilité, les chemins de dérivation seront restreints.
Ledger a remercié le développeur Monokh pour sa contribution.
Un coup dur pour Ledger ?
Cette faille de sécurité est un coup dur pour le fabricant de portefeuilles physiques. Bien qu’elle ne soit pas d’une extrême facilité à exploiter, elle est bien réelle. Le délai au bout duquel Ledger a pris en compte ce problème ne véhicule pas une très bonne image. C’est d’ailleurs sur un ton assez acerbe que Monokh conclut son article.
« La conclusion la plus choquante est peut-être la négligence de Ledger concernant le traitement de ce problème. Pour un problème de cette gravité, ne pas tenter de le résoudre, ne pas communiquer et éviter sa divulgation est irrespectueux envers la confiance que les gens (y compris moi-même) leur accordent. […] Je les exhorte à reconsidérer leur attention à la sécurité. Tel devrait être l’engagement d’un fabricant de portefeuilles matériels. » Monokh, Ledger App Isolation Bypass