Kwaadaardige Electrum-servers vervingen uitgezonden betalingen door valse zero-fee bitcoin-transacties; oplossing in 4.8.3
Belangrijkste punten
- •Electrum bracht versie 4.8.3 uit om een fout met hoge ernst te verhelpen waarbij kwaadaardige servers uitgezonden betalingen vervingen; beheerder SomberNight publiceerde op 24 oktober advies GHSA-6jp4-8v48-cc5v en riep gebruikers op te upgraden.
- •De aanval werkte omdat oudere versies de handtekeningen van mempool-transacties niet controleerden, waardoor een vervalste zero-fee transactie als in behandeling verscheen en een Replace-By-Fee-tariefsverhoging ervoor zorgde dat de wallet van het slachtoffer de versie van de aanvaller met een geldige handtekening ondertekende.
- •Een gedocumenteerd slachtoffer met een 2-of-3 legacy P2SH-multisig met twee Trezors ontving een valse transactie met byte-identieke scriptSigs op 31 inputs, waarvan het doeladres de laatste vier tekens van het echte imiteerde, eindigend op GyQ3.
- •De oplossing, geïntroduceerd in commit 90fe308, verifieert handtekeningen op wallet-eigen inputs voordat mempool-transacties aan de lokale geschied worden toegevoegd, maar inkomende onbevestigde betalingen kunnen pas volledig worden geverifieerd na bevestiging op de blockchain.
- •Electrum adviseert gebruikers die niet kunnen upgraden om output-adressen en bedragen te verifiëren voordat er iets wordt ondertekend, inclusief tariefsverhogingen; gebruikers die alleen verbinding maakten met hun eigen servers zijn nooit getroffen.

Kwaadaardige Electrum-servers hebben de zojuist uitgezonden bitcoin-betalingen van gebruikers vervangen door valse zero-fee transacties naar lookalike-adressen, in de gok dat slachtoffers het tarief zouden verhogen en zo de versie van de aanvaller zouden ondertekenen. Electrum bracht op 24 oktober versie 4.8.3 uit om de fout met hoge ernst te verhelpen. Beheerder SomberNight publiceerde dezelfde dag het advies GHSA-6jp4-8v48-cc5v en verzocht gebruikers te upgraden.
Hoe de aanval werkt
Electrum is een light client: het draait geen volledige bitcoin-node en is voor informatie over onbevestigde mempool-transacties afhankelijk van zijn server, zoals de eigen documentatie van het project uitlegt. Wanneer een gebruiker een transactie ondertekent en verzendt (tx1), kan een kwaadaardige server deze tegenhouden en de wallet een andere transactie (tx2) geven die het geld naar een adres van de aanvaller stuurt.
Tx2 bevat ongeldige handtekeningen. Oudere versies van Electrum controleerden de handtekeningen van mempool-transacties niet, waardoor de wallet tx2 als in behandeling toonde en tx1 verborg. Replace-By-Fee (RBF) staat een afzender toe een onbevestigde transactie opnieuw uit te zenden met een hoger tarief. Als het tarief van de valse transactie wordt verhoogd, ondertekent de wallet de versie van de aanvaller met een geldige handtekening. Daarmee wordt een routine-stap — het verhogen van het tarief van een ogenschijnlijk vastgelopen betaling — het moment waarop de eigen wallet van het slachtoffer de transactie van de aanvaller ondertekent.
Vervalst adres deelde de GyQ3-eindiging met de legitieme bestemming
Eén van de doelwitten, bekend als dannydeezy, documenteerde de aanval. De opstelling was een 2-of-3 legacy P2SH-multisig met twee Trezors, 31 inputs en één output. De gebruiker controleerde de output op beide Trezors en zond vervolgens uit. De Trezors controleerden de echte transactie voordat deze de wallet verliet; deie van de aanvaller verscheen pas daarna, aangeleverd door de kwaadaardige server, dus de controles op het apparaat zagen deze nooit. De walletgeschiedenis toonde daarna het volledige bedrag als onbevestigd gaande naar een onbekend adres, en het item werd later gewijzigd naar "Local." In Electrum betekent "Local" dat een transactie alleen bij de wallet bekend is en niet zichtbaar is op het netwerk.
De valse transactie kopieerde de inputs, versie en locktime van de echte transactie, met byte-identieke scriptSigs op alle 31 inputs. Alle 62 handtekeningen kwamen overeen met de echte transactie; geen enkele kwam overeen met de valse. Vrijwel al het geld ging naar een lookalike-adres, met een klein bedrag terug naar een van de eigen gebruikte adressen van de wallet.
De valse transactie eindigde op GyQ3 — en de echte bestemming ook. De aanvaller had een adres gevonden dat overeenkwam met de laatste vier tekens van het juiste adres. ZachXBT wees eerder al op een soortgelijk adresvergiftigingsschandaal dat gebruikers van de Phantom-wallet treft; vervalste adressen zijn ontworpen om een snelle blik op de eerste en laatste tekens te misleiden.
Versie 4.8.3 controleert handtekeningen alleen op wallet-eigen inputs
Een andere gebruiker, Raju-K12, meldde op 18 oktober privaat dat hij het tarief van de valse transactie had verhoogd en geld verloor. Volgens de beheerders voeren sommige servers de aanval actief uit.
Commit 90fe308 voegt een controle van handtekeningen op wallet-eigen "is_mine"-inputs toe voordat een mempool-transactie aan de lokale geschiedenis wordt toegevoegd. Versie 4.8.3 werd op 23 oktober als git-tag vastgelegd en een dag later van binaire bestanden voorzien.
Electrum controleert nog steeds alleen inputs die de wallet beheert, dus onbevestigde inkomende transacties worden niet gecontroleerd, omdat de client geen volledige script-interpreter heeft. Voor ontvangers betekent dit dat een inkomende betaling in behandeling niet volledig door de wallet zelf kan worden geverifieerd tot deze op de blockchain wordt bevestigd. De workaround van Electrum voor wie niet kan upgraden is het verifiëren van output-adressen en bedragen voordat er iets wordt ondertekend, inclusief tariefsverhogingen. Gebruikers die alleen verbinding maakten met hun eigen servers zijn nooit getroffen.
Electrum heeft eerder noodfixes uitgebracht. In januari 2018 sloot het een JSON RPC-interface af die ongeveer twee jaar open had gestaan, nadat Google-onderzoeker Tavis Ormandy ontdekte dat een website de poort kon detecteren en geld kon aftappen. Cryptopolitan meldde dat in juli een waarschuwing over een bug in de seed-generatie van Coldcard kwam, op dezelfde dag dat ongeveer 594 BTC — circa $38 miljoen — werd afgetapt uit zo'n 500 wallets.