L’anello dannoso della cripto-catena

29 Nov 2018

Praticamente tutti gli sviluppatori utilizzano librerie di terze parti: grazie alla condivisione delle proprie creazioni, milioni di sviluppatori in tutto il mondo hanno la possibilità di utilizzare moduli già esistenti per portare a termine certe operazioni in minor tempo. Tuttavia, utilizzare un codice di qualcun altro significa riporre la propria fiducia negli sviluppatori di quel codice. BitPay, che ha sviluppato il wallet di criptomonete Copay, di recente ha sperimentato le conseguenze negative di utilizzare risorse open source di terze parti.

Copay è una piattaforma multiple di Bitcoin/Bitcoin Cash che funge da wallet di criptomonete e che consente agli utenti di creare portafogli (o wallet) condivisi. La piattaforma Copay è stata sviluppata utilizzando JavaScript e si appoggia su numerose librerie open source di terze parti.

Una di queste librerie è un modulo open source Node.js chiamato event stream. Il repository sul servizio di versione di controllo GitHub era gestito da uno sviluppatore che da tempo aveva perso interesse nel progetto e che ormai da anni non si occupava delle sorti del repository. E quando un altro sviluppatore con poca attività alle spalle su GitHub gli ha chiesto se potesse avere le autorizzazioni da amministratore per gestire il repository, lo sviluppatore originario ha concesso tali permessi.

Il nuovo sviluppatore si è messo subito al lavoro. Innanzitutto, la libreria event stream ha cominciato a utilizzare un modulo chiamato flatmap-stream dal repository GitHub appartenente allo stesso sviluppatore. È stato poi modificato il modulo, aggiungendo un codice dannoso. Tre giorni dopo l’aggiornamento, il suddetto sviluppatore ha caricato un’altra versione di flatmap-stream, stavolta senza codice dannoso (probabilmente per nascondere le sue losche attività).

Ecco, quindi, come è stata compromessa la libreria event-stream, ampiamente utilizzata non solo da BitPay, ma da tante altre aziende. La libreria è stata compromessa solamente per tre giorni ma, durante questo lasso di tempo, gli sviluppatori di Copay (che non si sono accorti che la libreria fosse stata modificata aggiungendo un payload dannoso) hanno incluso la versione aggiornata della libreria all’interno del loro progetto. Il software aggiornato del portafoglio di criptomonete è stato pubblicato sugli app store e scaricato da molti utenti.

Forse gli sviluppatori di Copay non hanno voluto dedicare molto tempo a dare un’occhiata alle modifiche alle librerie utilizzate. Al giorno d’oggi, l’aggiornamento delle librerie utilizzate in un progetto è un processo facilmente automatizzato grazie ad alcuni servizi di gestione di pacchetti come npm. Grazie a npm, uno sviluppatore può attivare un solo comando per aggiornare tutti i moduli di terze parti utilizzati nel progetto.

E anche se gli sviluppatori avessero dato un’occhiata alle librerie aggiornate, sarebbe stato difficile individuare il codice dannoso. Le librerie utilizzate in un progetto possono dipendere da altre librerie (così come event-stream dipendeva da flatmap-stream) e verificare tutte le dipendenze può richiedere molto tempo. In questo caso in particolare, il processo è stato complicato maggiormente dal fatto che il modulo flatmap-stream fosse cifrato.

Secondo la CNN, la libreria flatmap-stream è stata modificata per filtrare le chiavi private (le password dei wallet, praticamente) dalle applicazioni che si affidano sia sulle librerie event-stream che su copy-dash. L’ultimo caso suggerisce che si è trattato di un attacco mirato rivolto a BitPay, ai creatori di Copay e agli autori di copy-dash. In questo caso, le chiavi sarebbero state filtrare solo se fossero state utilizzate entrambe le librerie, e ciò era possibile solo per i prodotti basati sul codice di Copay.

Secondo ArsTechica, il payload dannoso ha consentito ai cybercriminali di ottenere l’accesso non autorizzato ai wallet degli utenti e da lì spostare i fondi. La falla è stata scoperta e poi notificata da un utente GitHub. Purtroppo, prima che ciò accadesse, sono state distribuite diverse versioni dei wallet Copay contenenti il codice dannoso. BitPay alla fine ha ammesso quanto avvenuto e ha consigliato ai clienti che avessero utilizzato le versioni Copay da 5.0.2 a 5.1.0 di aggiornare all’ultima versione, ovvero la 5.2.0. Per il momento, non sono disponibili informazioni sul numero degli utenti coinvolti e a quanto ammontano i danni economici che hanno subito.

Si tratta di un classico attacco alla catena di distribuzione, in cui un cybercriminale compromette una libreria di terze parti utilizzata dagli sviluppatori di una app. Il problema ha origine dall’uso di un software open source, gestito da chissà chi. Non c’è garanzia che il software funzioni allo stesso modo in cui funzionava nelle precedenti e datate versioni. E non si può dare la colpa agli sviluppatori del software open source, in quanto hanno proposto il prodotto “così com’era”, e senza dare alcuna garanzia.

La cosa potrebbe essere più complicata perché anche Copay è open source e questa piattaforma viene impiegata da molti sviluppatori di altri wallet.

Le aziende che generano profitti fornendo dei software (soprattutto quando si tratta di software che servono a trasferire ingenti quantità di denaro) dovrebbero assicurarsi, prima della release, che il software rispetti certi criteri di sicurezza, compresa un’analisi dettagliata con tutte le nuove versioni delle librerie di terze parti utilizzate nel progetto.

Una buona abitudine è anche dare un’occhiata allo status del repository, analizzare le valutazioni degli altri sviluppatori, verificare quante volte è stato aggiornato il progetto (e a quando risale l’ultimo aggiornamento) e analizzare il bug log. Qualsiasi anomalia dovrebbe essere analizzata con attenzione oppure sarebbe meglio passare a un altro modulo.

Se qualcosa non va con la libreria, per i clienti la colpa è dell’azienda che ha fornito il software (che si poggia su quella libreria), anche se in realtà il problema originario risiede nella libreria. Ovviamente, la nostra intenzione non è sconsigliare prodotti open source, ma di consigliare invece di prestare maggiore attenzione e di rimanere sempre in guardia.