Bug in Electrum Wallet permette deanonimizzazione e furto bitcoin via web

di | 7 Gennaio 2018

Se avete Electrum aperto in questo momento prima di leggere il resto dell’articolo chiudetelo. Il motivo è che poche ore fa è stata pubblicata la notizia che descrive un pericoloso bug di Electrum, anticipata su Twitter dal ricercatore Google Tavis Ormandy, bug già noto pubblicamente da oltre un mese in realtà, che permette l’accesso al wallet Electrum tramite interfaccia JSONRPC senza che la comunicazione con il servizio richieda autenticazione (come invece avviene per altri wallet dove la sessione RPC è protetta da password) e con il Cross-Origin Resource Sharing (CORS) abilitato. Il bug colpisce anche i vari derivati di Electrum, Electron Cash, Electrum LTC, Electrum XVG e le varie versioni dedicate alle diverse altcoin.

Questo significa che qualunque sito web è in grado di accedere al wallet Electrum (per quanto i moderni browser dovrebbero avvisare l’utente del tentativo di accesso da parte di terzi via RCP su localhost) e operare una delle seguenti azioni:

  • Con wallet non protetto da password:
    • ottenere direttamente tutte le chiavi private in chiaro e spendere bitcoin;
    • modificare le impostazioni di Electrum;
    • ottenere l’elenco degli indirizzi deanonimizzandoli, cioè associandoli quindi all’indirizzo IP del proprietario.
  • Con wallet protetto da password:
    • tentare di sbloccare il wallet tramite attacco brute force (con una nuova richiesta json-rpc per ogni tentativo, quindi non velocemente) ma senza avere la possibilità di ottenere ed esportare direttamente le chiavi criptate (e quindi senza poter tentare il brute-force offline da remoto);
    • modificare le impostazioni di Electrum;
    • ottenere l’elenco degli indirizzi deanonimizzandoli, cioè associandoli quindi all’indirizzo IP del proprietario.

Il servizio RPC utilizza una porta casuale ma è facile, per un codice javascript caricato da qualunque sito web visitato da un utente che, contemporaneamente alla visita ha aperto il proprio wallet su Electrum e non fa caso alle notifiche del browser (o esegue una pagina compromessa via HTML in locale) eseguire un portscan, identificare la porta corretta per avviare la comunicazione JSONRPC e ottenere il wallet, come fa notare l’utente taviso (Tavis Ormandy) su Bitcoin Talk.

Bug JSON RPC di Electrum Wallet

Pochi giorni prima infatti era stato fatto notare dall’utente igrishaev come una semplice chiamata del comando Linux curl che sfruttasse il canale JSON RPC permettesse di ottenere i dati del wallet.

Bug di Electrum via JSON RPC

Come fanno giustamente notare su BitcoinTalk, non è detto che la compromissione del wallet implichi lo svuotamento immediato, eventuali malintenzionati potrebbero avere acquisito i wallet dei visitatori in passato e non aver ancora utilizzato le chiavi private, per questo motivo theymos consiglia a chi è particolarmente paranoico o possiede cifre ingenti nel proprio wallet di spostarle su nuovo indirizzo creato con la nuova versione di Electrum. Nel caso in cui decine di migliaia di utenti decideranno di spostare i propri fondi, si noterà certamente un aumento del picco di transazioni nella rete bitcoin, generate prevalentemente dai nuovi client Electrum.

Su Reddit diversi utenti fanno giustamente notare che i moderni browser prevengono tentativi di Cross Site Scripting (XSS) tra siti web e ovviamente anche tra siti web e localhost, riducendo quindi drasticamente il rischio che l’attacco da web possa essere portato a termine con successo, dato che l’utente dovrebbe in teoria essere informato del tentativo bloccato. Ovviamente, nel dubbio, è meglio essere cauti e seguire le istruzioni fornite dagli sviluppatori, dato che le minacce potrebbero arrivare anche da script/applicazioni locali, che quindi non devono passare attraverso XSS per accedere al servizio RPC locale.

Anche chi usa Electrum in modalità watch-only – cioè chi usa Electrum solamente per visionare il balance e le transazioni del proprio wallet senza poterne spendere i bitcoin – corre il rischio di deanonimizzazione dei propri indirizzi bitcoin e del proprio wallet tramite una chiamata del comando “listaddresses”. Eventuali malintenzionati con un semplice javascript malevolo sul proprio sito web (o tramite vulnerabilità di XSS Cross Site Scripting su siti di terzi) non potranno ovviamente spendere i fondi (mancando nel wallet le chiavi private) ma potranno ottenere la lista degli indirizzi (persino il seed mnemonic, così da avere anche a disposizione gli indirizzi futuri) e associarli all’indirizzo IP dal quale l’utente sta visitando il sito web.

Si consideri, tra l’altro, che la deanonimizzazione degli indirizzi – se avvenuta – non viene risolta spostando i bitcoin verso nuovi indirizzi (mentre così certamente se ne previene il furto) poiché il tracciamento delle transazioni Bitcoin permette di seguirne il flusso e mantenere le informazioni sugli indirizzi bitcoin tramite clusterizzazione dei nuovi wallet.

In consiglio per tutti gli utilizzatori del wallet Electrum è quello di aggiornare all’ultima versione (3.0.4 o successive per Electrum o quelle che verranno prodotte per i vari derivati) dopo aver verificato l’integrità della firma PGP del codice e facendo attenzione a non cadere vittime di phishing, scaricando Electrum da siti fake o cercando “Electrum” su Google cliccando su link di advertising potenzialmente dannosi.

Per i numerosi utenti di Electrum-LTC per gestire i propri Litecoin non è ancora disponibile versione con la patch, gli sviluppatori consigliano quindi di non avviare Electrum LTC fino alla pubblicazione della patch.

Electrum LTC bug RPC JSON

L’utente theymos nel forum Bitcoin Talk suggerisce, sempre per i più cauti, di non affrettarsi a utilizzare la versione aggiornata (potrebbe infatti contenere nuovi bachi o non aver completamente fixato quelli vecchi) ma certamente di non avviare la versione vecchia soprattutto se in contemporanea con un browser, anche se in teoria tutti i browser moderni dovrebbero essere in grado di rilevare un tentativo di accesso RCP XSS su localhost.


Aggiornamento 8 gennaio 2018

Sembra che l’aggiornamento alla versione 3.0.4 di Electrum Wallet non risolva il problema , come ha segnalato un utente su GitHub, pubblicando anche un PoC di exploit per Safari che non utilizza header CORS per dimostrare che la vulnerabilità è ancora sfruttabile – sollevando tra l’altro le critiche di chi avrebbe preferito la comunicazione privata dell’exploit almeno fino al momento in cui non fosse stato prodotto il fix.

lo stesso vale per Electrum Cash, Electrum Dash e Electrum LTC. E’ stata appena pubblicata la versione 3.0.5 sul sito di Electrum, si consiglia di aggiornare immediatamente e non avviare la 3.0.4. Gli aggiornamenti con i fix per il bug su JSONRPC di Electrum Cash, Electrum Dash ed Electrum LTC seguiranno a breve.

E’ stato pubblicato da poche ore l’aggiornamento di Electrum Cash alla versione 3.0.5 che sembra – con le dovute precauzioni – aver risolto il problema dell’accesso incontrollato a JSONRPC, proteggendo infatti tramite password l’interfaccia JSONRPC e disabilitando i comandi JSONRPC se la GUI è in esecuzione, eccetto il ‘ping’ che viene utilizzato per stabilire se c’è un’interfaccia grafica in esecuzione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *