{"id":16652,"date":"2018-11-29T15:27:23","date_gmt":"2018-11-29T13:27:23","guid":{"rendered":"https:\/\/www.kaspersky.it\/blog\/?p=16652"},"modified":"2019-11-22T10:58:37","modified_gmt":"2019-11-22T08:58:37","slug":"copay-supply-chain-attack","status":"publish","type":"post","link":"https:\/\/www.kaspersky.it\/blog\/copay-supply-chain-attack\/16652\/","title":{"rendered":"L&#8217;anello dannoso della cripto-catena"},"content":{"rendered":"<p>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\u00e0 di utilizzare moduli gi\u00e0 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.<\/p>\n<p><a href=\"https:\/\/github.com\/bitpay\/copay\/\" target=\"_blank\" rel=\"noopener nofollow\">Copay<\/a> \u00e8 una piattaforma multiple di Bitcoin\/Bitcoin Cash che funge da <a href=\"https:\/\/www.kaspersky.it\/blog\/cryptowallets\/15418\/\" target=\"_blank\" rel=\"noopener\">wallet di criptomonete<\/a> e che consente agli utenti di creare portafogli (o wallet) condivisi. La piattaforma Copay \u00e8 stata sviluppata utilizzando JavaScript e si appoggia su numerose librerie open source di terze parti.<\/p>\n<p>Una di queste librerie \u00e8 un modulo open source Node.js chiamato <em>event stream.<\/em> 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\u00e0 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.<\/p>\n<p>Il nuovo sviluppatore si \u00e8 messo subito al lavoro. Innanzitutto, la libreria <em>event stream<\/em> ha cominciato a utilizzare un modulo chiamato <em>flatmap-stream<\/em> dal repository GitHub appartenente allo stesso sviluppatore. \u00c8 stato poi modificato il modulo, aggiungendo un codice dannoso. Tre giorni dopo l\u2019aggiornamento, il suddetto sviluppatore ha caricato un\u2019altra versione di <em>flatmap-stream<\/em>, stavolta senza codice dannoso (probabilmente per nascondere le sue losche attivit\u00e0).<\/p>\n<p>Ecco, quindi, come \u00e8 stata compromessa la libreria <em>event-stream<\/em>, ampiamente utilizzata non solo da BitPay, ma da tante altre aziende. La libreria \u00e8 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\u2019interno del loro progetto. Il software aggiornato del portafoglio di criptomonete \u00e8 stato pubblicato sugli app store e scaricato da molti utenti.<\/p>\n<p>Forse gli sviluppatori di Copay non hanno voluto dedicare molto tempo a dare un\u2019occhiata alle modifiche alle librerie utilizzate. Al giorno d\u2019oggi, l\u2019aggiornamento delle librerie utilizzate in un progetto \u00e8 un processo facilmente automatizzato grazie ad alcuni servizi di gestione di pacchetti come npm. Grazie a npm, uno sviluppatore pu\u00f2 attivare un solo comando per aggiornare tutti i moduli di terze parti utilizzati nel progetto.<\/p>\n<p>E anche se gli sviluppatori avessero dato un\u2019occhiata alle librerie aggiornate, sarebbe stato difficile individuare il codice dannoso. Le librerie utilizzate in un progetto possono dipendere da altre librerie (cos\u00ec come <em>event-stream<\/em> dipendeva da <em>flatmap-stream<\/em>) e verificare tutte le dipendenze pu\u00f2 richiedere molto tempo. In questo caso in particolare, il processo \u00e8 stato complicato maggiormente dal fatto che il modulo <em>flatmap-stream<\/em> fosse cifrato.<\/p>\n<p>Secondo la <a href=\"https:\/\/www.ccn.com\/breaking-numerous-bitcoin-wallets-may-have-been-compromised-by-rogue-developer\/\" target=\"_blank\" rel=\"noopener nofollow\">CNN<\/a>, la libreria <em>flatmap-stream<\/em> \u00e8 stata modificata per filtrare le chiavi private (le password dei wallet, praticamente) dalle applicazioni che si affidano sia sulle librerie <em>event-stream<\/em> che su <em>copy-dash<\/em>. L\u2019ultimo caso suggerisce che si \u00e8 trattato di un attacco mirato rivolto a BitPay, ai creatori di Copay e agli autori di <em>copy-dash<\/em>. In questo caso, le chiavi sarebbero state filtrare solo se fossero state utilizzate entrambe le librerie, e ci\u00f2 era possibile solo per i prodotti basati sul codice di Copay.<\/p>\n<p>Secondo <a href=\"https:\/\/arstechnica.com\/information-technology\/2018\/11\/hacker-backdoors-widely-used-open-source-software-to-steal-bitcoin\/\" target=\"_blank\" rel=\"noopener nofollow\">ArsTechica<\/a>, il payload dannoso ha consentito ai cybercriminali di ottenere l\u2019accesso non autorizzato ai wallet degli utenti e da l\u00ec spostare i fondi. La falla \u00e8 stata scoperta e poi <a href=\"https:\/\/github.com\/dominictarr\/event-stream\/issues\/116#issuecomment-441749105\" target=\"_blank\" rel=\"noopener nofollow\">notificata<\/a> da un utente GitHub. Purtroppo, prima che ci\u00f2 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\u2019ultima 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.<\/p>\n<p>Si tratta di un classico attacco alla supplu chain, in cui un cybercriminale compromette una libreria di terze parti utilizzata dagli sviluppatori di una app. Il problema ha origine dall\u2019uso di un software open source, gestito da chiss\u00e0 chi. Non c\u2019\u00e8 garanzia che il software funzioni allo stesso modo in cui funzionava nelle precedenti e datate versioni. E non si pu\u00f2 dare la colpa agli sviluppatori del software open source, in quanto hanno proposto il prodotto \u201ccos\u00ec com\u2019era\u201d, e senza dare alcuna garanzia.<\/p>\n<p>La cosa potrebbe essere pi\u00f9 complicata perch\u00e9 anche Copay \u00e8 open source e questa piattaforma viene impiegata da molti sviluppatori di altri wallet.<\/p>\n<p>Le aziende che generano profitti fornendo dei software (soprattutto quando si tratta di software che servono a trasferire ingenti quantit\u00e0 di denaro) dovrebbero assicurarsi, prima della release, che il software rispetti certi criteri di sicurezza, compresa un\u2019analisi dettagliata con tutte le nuove versioni delle librerie di terze parti utilizzate nel progetto.<\/p>\n<p>Una buona abitudine \u00e8 anche dare un\u2019occhiata allo status del repository, analizzare le valutazioni degli altri sviluppatori, verificare quante volte \u00e8 stato aggiornato il progetto (e a quando risale l\u2019ultimo aggiornamento) e analizzare il <em>bug log<\/em>. Qualsiasi anomalia dovrebbe essere analizzata con attenzione oppure sarebbe meglio passare a un altro modulo.<\/p>\n<p>Se qualcosa non va con la libreria, per i clienti la colpa \u00e8 dell\u2019azienda che ha fornito il software (che si poggia su quella libreria), anche se in realt\u00e0 il problema originario risiede nella libreria. Ovviamente, la nostra intenzione non \u00e8 sconsigliare prodotti open source, ma di consigliare invece di prestare maggiore attenzione e di rimanere sempre in guardia.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un attacco alla catena di distribuzione rivolto ai wallet di criptomonete Copay consente il furto di Bitcoin mediante la libreria open source.<\/p>\n","protected":false},"author":675,"featured_media":16653,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2364,2956],"tags":[820,2835,3002,2556,3003,3076],"class_list":{"0":"post-16652","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-smb","9":"tag-bitcoin","10":"tag-catena-di-distribuzione","11":"tag-copay","12":"tag-criptomonete","13":"tag-open-source","14":"tag-supply-chain"},"hreflang":[{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/copay-supply-chain-attack\/16652\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/copay-supply-chain-attack\/14735\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/copay-supply-chain-attack\/12342\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/copay-supply-chain-attack\/16652\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/copay-supply-chain-attack\/14843\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/copay-supply-chain-attack\/13824\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/copay-supply-chain-attack\/17443\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/copay-supply-chain-attack\/21845\/"},{"hreflang":"tr","url":"https:\/\/www.kaspersky.com.tr\/blog\/copay-supply-chain-attack\/5472\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/copay-supply-chain-attack\/24786\/"},{"hreflang":"pl","url":"https:\/\/plblog.kaspersky.com\/copay-supply-chain-attack\/10102\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/copay-supply-chain-attack\/18176\/"},{"hreflang":"ja","url":"https:\/\/blog.kaspersky.co.jp\/copay-supply-chain-attack\/22088\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/copay-supply-chain-attack\/21585\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/copay-supply-chain-attack\/21584\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.it\/blog\/tag\/supply-chain\/","name":"supply chain"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/16652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/users\/675"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/comments?post=16652"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/16652\/revisions"}],"predecessor-version":[{"id":18543,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/16652\/revisions\/18543"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media\/16653"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media?parent=16652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/categories?post=16652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/tags?post=16652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}