Deux vulnérabilités de bitcoinjs-lib peuvent amener les applications à sous-estimer les frais de mineur d'une transaction Bitcoin valide. Les avis du 26 octobre indiquent des correctifs dans les versions 5.2.2, 6.1.9 et 7.0.4. Le flux concerné utilise des transactions Bitcoin partiellement signées, ou PSBT, dans lesquelles les applications transmettent les données de transaction et les signatures entre clients.
Dans l'une des failles, la signature et le calcul des frais peuvent utiliser des valeurs différentes pour une même entrée. Une démonstration sur bitcoinjs-lib 7.0.1 a montré des frais réels de 900,000,000 satoshi signalés comme ne s'élevant qu'à 200 satoshi, permettant à la transaction de passer l'avertissement par défaut sur le taux de frais. La seconde faille concerne des entrées finalisées auxquelles il manque des enregistrements de valeur. Son exemple hypothétique montrait des frais réels de 91,000 satoshi signalés comme s'élevant à 1,000 satoshi.
Pourquoi c'est important
Les bugs ne créent pas de signatures et n'autorisent pas de transferts à eux seuls. Une perte nécessite qu'une transaction autorisée et valide soit diffusée puis acceptée par le réseau Bitcoin, la valeur excédentaire étant versée sous forme de frais de mineur. Le risque se concentre dans les applications qui se fient au calcul des frais de bitcoinjs-lib ou à ses protections contre les frais excessifs sans vérifier indépendamment les sorties dépensées.
Les versions concernées incluent les versions 5.2.0 à 5.2.1, 6.0.0 à 6.1.8 et 7.0.0-rc.0 à 7.0.3 pour la faille liée aux enregistrements contradictoires. La faille liée aux enregistrements manquants concerne également les versions 5.1.0 à 5.2.1.
Impact sur le marché
Il s'agit d'un problème de sécurité des applications et des portefeuilles, et non d'une défaillance du consensus de Bitcoin. Les mainteneurs doivent passer aux versions corrigées, rejeter les valeurs ou scripts d'entrée contradictoires et vérifier la valeur de chaque entrée avant de signer, de se fier aux frais ou d'extraire une transaction.
Le correctif donne à la signature et à la comptabilité une méthode commune pour résoudre les sorties précédentes, exige un montant pour chaque entrée lors du calcul des frais et efface les frais mis en cache ainsi que les transactions extraites après toute modification des métadonnées concernées. Les équipes qui ne peuvent pas effectuer la mise à niveau doivent vérifier indépendamment les valeurs des sorties référencées.
Questions fréquemment posées
-
Qu'est-ce que bitcoinjs-lib a corrigé ?
Le projet a corrigé deux bugs susceptibles d'amener les applications à sous-estimer les frais de mineur lors du traitement de transactions Bitcoin partiellement signées.
-
Quelle était l'ampleur de l'écart de frais dans l'une des démonstrations ?
Une démonstration sur bitcoinjs-lib 7.0.1 a montré des frais réels de 900,000,000 satoshi signalés comme s'élevant à 200 satoshi.
-
Les vulnérabilités peuvent-elles déplacer des bitcoins sans signature ?
Non. Les défauts ne créent pas de signatures et n'autorisent pas de transferts. Une perte nécessite qu'une transaction autorisée et valide soit diffusée puis acceptée.
-
Quelles versions de bitcoinjs-lib contiennent les correctifs ?
Les avis indiquent des correctifs dans les versions 5.2.2, 6.1.9 et 7.0.4 pour leurs branches de publication respectives.
-
Que doivent faire les mainteneurs s'ils ne peuvent pas effectuer la mise à niveau ?
Ils doivent vérifier indépendamment les valeurs des sorties référencées, rejeter les enregistrements contradictoires avant de signer ou de se fier aux frais, et vérifier la valeur de chaque entrée avant d'extraire une transaction.