Des serveurs Electrum malveillants ont remplacé des paiements diffusés par de fausses transactions bitcoin à frais zéro ; correctif livré avec la 4.8.3
Points clés
- •Electrum a publié la version 4.8.3 pour corriger une faille de gravité élevée impliquant des serveurs malveillants échangeant des paiements diffusés, le mainteneur SomberNight ayant publié l'avis GHSA-6jp4-8v48-cc5v le 24 octobre et appelant les utilisateurs à mettre à jour.
- •L'attaque fonctionnait car les versions antérieures ne vérifiaient pas les signatures des transactions du mempool : une fausse transaction à frais zéro s'affichait comme en attente et une augmentation des frais via Replace-By-Fee faisait signer au portefeuille de la victime la version de l'attaquant avec une signature valide.
- •Une victime documentée utilisant un multisig legacy P2SH 2-sur-3 avec deux Trezor a reçu une fausse transaction avec des scriptSigs identiques à l'octet près sur 31 entrées, dont l'adresse de destination imitait les quatre derniers caractères de la véritable, se terminant par GyQ3.
- •Le correctif, introduit dans le commit 90fe308, vérifie les signatures des entrées appartenant au portefeuille avant d'ajouter les transactions du mempool à l'historique local, mais les paiements entrants non confirmés ne peuvent toujours pas être entièrement vérifiés par le portefeuille avant leur confirmation sur la blockchain.
- •Electrum conseille aux utilisateurs qui ne peuvent pas mettre à jour de vérifier les adresses de sortie et les montants avant de signer quoi que ce soit, y compris lors d'une augmentation des frais ; les utilisateurs connectés uniquement à leurs propres serveurs n'ont jamais été touchés.

Des serveurs Electrum malveillants remplacent les paiements bitcoin que les utilisateurs viennent de diffuser par de fausses transactions à frais zéro vers des adresses imitées, en pariant que les victimes augmenteraient les frais et signeraient la version de l'attaquant. Electrum a publié la version 4.8.3 le 24 octobre pour corriger cette faille de gravité élevée. Le mainteneur SomberNight a publié le même jour l'avis GHSA-6jp4-8v48-cc5v et a demandé aux utilisateurs d'effectuer la mise à jour.
Comment fonctionne l'attaque
Electrum est un client léger : il n'exécute pas de nœud bitcoin complet et dépend de son serveur pour les informations sur les transactions non confirmées du mempool, comme l'explique la documentation du projet. Lorsqu'un utilisateur signe et envoie une transaction (tx1), un serveur malveillant peut l'intercepter et remettre au portefeuille une transaction différente (tx2) qui envoie les fonds vers l'adresse de l'attaquant.
Tx2 comporte des signatures invalides. Les versions antérieures d'Electrum ne vérifiaient pas les signatures des transactions du mempool, de sorte que le portefeuille affichait tx2 comme en attente et masquait tx1. Replace-By-Fee (RBF) permet à un expéditeur de rediffuser une transaction non confirmée avec des frais plus élevés. Si les frais de la fausse transaction sont augmentés, le portefeuille signe la version de l'attaquant avec une signature valide. Une étape banale — augmenter les frais d'un paiement qui semble bloqué — devient ainsi le moment où le portefeuille de la victime signe elle-même la transaction de l'attaquant.
L'adresse forgée partageait une terminaison GyQ3 avec la destination légitime
L'une des cibles, connue sous le pseudonyme de dannydeezy, a documenté l'attaque. La configuration était un multisig legacy P2SH 2-sur-3 avec deux Trezor, 31 entrées et une sortie. L'utilisateur a vérifié la sortie sur les deux Trezor, puis a diffusé la transaction. Les Trezor ont vérifié la transaction authentique avant qu'elle ne quitte le portefeuille ; la version de l'attaquant n'est apparue qu'ensuite, transmise par le serveur malveillant, si bien que les vérifications sur l'appareil ne l'ont jamais vue. L'historique du portefeuille affichait ensuite le montant intégral vers une adresse inconnue comme non confirmé, et l'entrée est ensuite passée au statut « Local ». Dans Electrum, « Local » désigne une transaction connue uniquement du portefeuille et invisible sur le réseau.
La fausse transaction reproduisait les entrées, la version et le locktime de la transaction réelle, avec des scriptSigs identiques à l'octet près sur les 31 entrées. Les 62 signatures correspondaient à la transaction réelle ; aucune ne correspondait à la fausse. Presque tous les fonds ont été envoyés vers une adresse imitée, une petite somme étant retournée à l'une des adresses déjà utilisées du portefeuille.
La fausse adresse se terminait par GyQ3 tout comme la véritable destination. L'attaquant avait trouvé une adresse reprenant les quatre derniers caractères de la bonne adresse. ZachXBT a également signalé une arnaque similaire d'empoisonnement d'adresses touchant les utilisateurs du portefeuille Phantom ; les adresses usurpées sont conçues pour tromper un simple coup d'œil aux premiers et derniers caractères.
La version 4.8.3 vérifie les signatures uniquement sur les entrées appartenant au portefeuille
Un autre utilisateur, Raju-K12, a signalé de manière privée le 18 octobre avoir augmenté les frais de la fausse transaction et perdu des fonds. Selon les mainteneurs, certains serveurs mènent l'attaque en conditions réelles.
Le commit 90fe308 ajoute une vérification des signatures sur les entrées « is_mine » appartenant au portefeuille avant l'ajout d'une transaction du mempool à l'historique local. La version 4.8.3 a été balisée sur git le 23 octobre et les binaires ont été publiés le lendemain.
Electrum ne vérifie toujours que les entrées contrôlées par le portefeuille, si bien que les transactions entrantes non confirmées ne sont pas vérifiées, le client ne disposant pas d'un interpréteur de script complet. Pour les destinataires, cela signifie qu'un paiement entrant en attente ne peut pas être entièrement vérifié par le portefeuille seul tant qu'il n'est pas confirmé sur la blockchain. La solution de contournement qu'Electrum propose à ceux qui ne peuvent pas mettre à jour est de vérifier les adresses de sortie et les montants avant de signer quoi que ce soit, y compris lors d'une augmentation des frais. Les utilisateurs connectés uniquement à leurs propres serveurs n'ont jamais été touchés.
Electrum a déjà livré des correctifs d'urgence par le passé. En janvier 2018, elle a fermé une interface JSON RPC restée ouverte pendant près de deux ans, après que le chercheur de Google Tavis Ormandy a découvert qu'un site web pouvait détecter le port et vider les fonds. Cryptopolitan a rapporté qu'un avertissement concernant un bug de génération de graine sur Coldcard était survenu en juillet, le jour même où environ 594 BTC — environ 38 millions de dollars — ont été vidés d'environ 500 portefeuilles.