Rapporto di controllo Snap MetaMask per Polkadot

Sommario di gestione

Polkadot ha contattato Sayfer Security per eseguire un controllo di sicurezza sull'applicazione Metamask Snap di Polkadot nell'agosto 2023.

Prima di valutare i servizi di cui sopra, abbiamo tenuto un incontro iniziale con il team tecnico e abbiamo ricevuto una panoramica del sistema e degli obiettivi di questa ricerca.

Nel corso di un periodo di ricerca di 2 settimane, abbiamo scoperto 5 vulnerabilità nel codice base dello snap.

In conclusione, a seguito del rapporto dovrebbero essere implementate diverse soluzioni, ma il livello di sicurezza del sistema è adeguato.

Metodologia del rischio

Noi di Sayfer ci impegniamo a fornire ai nostri clienti test di penetrazione della massima qualità. Ecco perché abbiamo implementato un modello completo di valutazione del rischio per valutare la gravità dei nostri risultati e fornire ai nostri clienti le migliori raccomandazioni possibili per la mitigazione.

Il nostro modello di valutazione del rischio si basa su due fattori chiave: IMPATTO ed PROBABILITÀ. L'impatto si riferisce al danno potenziale che potrebbe derivare da un problema, come una perdita finanziaria, un danno alla reputazione o un sistema non operativo. La probabilità si riferisce alla probabilità che si verifichi un problema, tenendo conto di fattori quali la complessità dell'attacco e il numero di potenziali aggressori.

Combinando questi due fattori, possiamo creare una comprensione completa del rischio posto da un particolare problema e fornire ai nostri clienti una valutazione chiara e attuabile della gravità del problema. Questo approccio ci consente di dare priorità alle nostre raccomandazioni e garantire che i nostri clienti ricevano la migliore consulenza possibile su come proteggere la loro attività.

Il rischio è definito come segue:

Vulnerabilità per rischio

Alta – Minaccia diretta ai processi aziendali chiave.
Medio – Minaccia indiretta ai processi aziendali chiave o minaccia parziale ai processi aziendali.
Basso – Non esiste alcuna minaccia diretta. La vulnerabilità può essere sfruttata utilizzando altre vulnerabilità.
Informativo – Questo risultato non indica vulnerabilità, ma riporta un commento che segnala difetti di progettazione e implementazione impropria che potrebbero causare problemi a lungo termine.

Gravità
# di problemi
Alta
0
Medio
2
Basso
2
Informativo
1

Approccio

Introduzione

Chainsafe ha contattato Sayfer per eseguire test di penetrazione sull'applicazione Metamask Snap di Polkadot.

Questo rapporto documenta la ricerca condotta da Sayfer mirata alle risorse selezionate definite nell'ambito della ricerca. In particolare, questo rapporto mostra la revisione del livello di sicurezza per le due applicazioni MetaMask Snap e l'infrastruttura circostante e le implementazioni dei processi.

Il ciclo di vita del nostro progetto di test di penetrazione:

01

Panoramica dell'ambito

02

Panoramica tecnica

03

Convalida dell'ambito

04

Modello di minaccia

05

Valutazione della sicurezza

06

Valutazione della sicurezza

Panoramica dell'ambito

Durante il nostro primo incontro e dopo aver compreso le esigenze dell'azienda, abbiamo definito come ambito del progetto l'ambito dell'applicazione che risiede ai seguenti URL:

Scatto a pois
Impegno di controllo: 61787c6d2193e7ec6dee6cf3ecfae4b855717092
Le correzioni si impegnano:

I nostri test sono stati eseguiti nell’agosto 2023

Non lasciare che sia troppo tardi!

Inizia la tua verifica con Sayfer

Convalida dell'ambito

Abbiamo iniziato assicurandoci che l'ambito definito dal cliente fosse tecnicamente logico. Decidere quale ambito è corretto per un dato sistema fa parte della discussione iniziale. Ottenere l'ambito giusto è fondamentale per ottenere il massimo valore aziendale dalla ricerca.

Modello di minaccia

Durante i nostri incontri di kickoff con il cliente abbiamo definito le risorse più importanti che l'applicazione possiede.

Abbiamo definito che la più grande minaccia attuale al sistema è il furto dei fondi degli utenti

Non lasciare che sia troppo tardi!

Inizia la tua verifica con Sayfer

Metodologia di valutazione della sicurezza

Sayfer utilizza OWASP WSTG come nostro standard tecnico durante la revisione delle applicazioni web. Dopo aver acquisito una conoscenza approfondita del sistema, abbiamo deciso quali test OWASP sono necessari per valutare il sistema.

Valutazione della sicurezza

Dopo aver compreso e definito l'ambito, eseguito la modellazione delle minacce e valutato i test corretti richiesti per verificare completamente l'eventuale presenza di difetti di sicurezza nell'applicazione, abbiamo eseguito la nostra valutazione della sicurezza.

Descrizione della tabella dei problemi

Titolo del problema

ID DIRE-??: un ID per facilitare la comunicazione su ciascuna vulnerabilità
Stato dei servizi Aperto/Fisso/Confermato
Rischio Rappresenta il fattore di rischio del problema. Per una descrizione più approfondita fare riferimento al Vulnerabilità per rischio .
Impatto sul business Il principale rischio di vulnerabilità a livello aziendale.
Dove L'URL o il file in cui è stato rilevato questo problema. I numeri senza ubicazione non hanno una ubicazione particolare e si riferiscono al prodotto nel suo complesso.

Descrizione

Qui forniamo una breve descrizione del problema e di come si è formato, i passaggi che abbiamo effettuato per individuarlo o sfruttarlo, insieme alla prova di concetto (se presente) e in che modo questo problema può influire sul prodotto o sui suoi utenti.

Mitigazione

Opzioni di risoluzione suggerite per questo problema e collegamenti a siti consigliati per ulteriori soluzioni.

Valutazione della sicurezza

I seguenti test sono stati condotti durante l'audit del sistema

Raccolta di informazioni

Raccolta di informazioni Nome del test
WSTG-INFO-01 Condurre la ricognizione della scoperta dei motori di ricerca per la fuga di informazioni
WSTG-INFO-02 Server web di impronte digitali
WSTG-INFO-03 Esamina i metafile del server Web per perdite di informazioni
WSTG-INFO-04 Enumerare le applicazioni sul server Web
WSTG-INFO-05 Esaminare il contenuto della pagina Web per perdite di informazioni
WSTG-INFO-06 Identificare i punti di ingresso dell'applicazione
WSTG-INFO-07 Mappa i percorsi di esecuzione attraverso l'applicazione
WSTG-INFO-08 Framework di applicazioni Web per impronte digitali
WSTG-INFO-09 Applicazione Web per impronte digitali
WSTG-INFO-10 Mappa dell'architettura dell'applicazione

Test di gestione della configurazione e della distribuzione

Test di gestione della configurazione e della distribuzione Nome del test
WSTG-CONF-01 Testare la configurazione dell'infrastruttura di rete
WSTG-CONF-02 Testare la configurazione della piattaforma dell'applicazione
WSTG-CONF-03 Testare la gestione delle estensioni dei file per le informazioni riservate
WSTG-CONF-04 Esamina il vecchio backup e i file senza riferimenti per informazioni riservate
WSTG-CONF-05 Enumerare le interfacce di amministrazione dell'infrastruttura e dell'applicazione
WSTG-CONF-06 Prova i metodi HTTP
WSTG-CONF-07 Testare la sicurezza del trasporto HTTP Strict
WSTG-CONF-08 Testare la politica interdominio RIA
WSTG-CONF-09 Testare l'autorizzazione del file
WSTG-CONF-10 Test per Subdomain Takeover
WSTG-CONF-11 Prova l'archiviazione cloud

Test di gestione dell'identità

Test di gestione dell'identità Nome del test
WSTG-IDNT-01 Testare le definizioni dei ruoli
WSTG-IDNT-02 Processo di registrazione dell'utente di prova
WSTG-IDNT-03 Processo di provisioning dell'account di prova
WSTG-IDNT-04 Test per l'enumerazione degli account e l'account utente indovinabile
WSTG-IDNT-05 Test per la politica del nome utente debole o non applicata

Test di autenticazione

Test di autenticazione Nome del test
WSTG-ATHN-01 Test per le credenziali trasportate su un canale crittografato
WSTG-ATHN-02 Test per le credenziali predefinite
WSTG-ATHN-03 Test per il meccanismo di blocco debole
WSTG-ATHN-04 Test per bypassare lo schema di autenticazione
WSTG-ATHN-05 Test per la password ricordata vulnerabile
WSTG-ATHN-06 Test per le debolezze della cache del browser
WSTG-ATHN-07 Test per criteri password deboli
WSTG-ATHN-08 Test per risposta alla domanda di sicurezza debole
WSTG-ATHN-09 Test per funzionalità di modifica o ripristino password deboli
WSTG-ATHN-10 Test per un'autenticazione più debole in un canale alternativo

Test di autorizzazione

Test di autorizzazione Nome del test
WSTG-ATHZ-01 Includi file di attraversamento directory di prova
WSTG-ATHZ-02 Test per bypassare lo schema di autorizzazione
WSTG-ATHZ-03 Test per l'escalation dei privilegi
WSTG-ATHZ-04 Test per riferimenti a oggetti diretti non sicuri

Test di gestione della sessione

Test di gestione della sessione Nome del test
WSTG-SESS-01 Test per lo schema di gestione delle sessioni
WSTG-SESS-02 Test per gli attributi dei cookie
WSTG-SESS-03 Test per la fissazione della sessione
WSTG-SESS-04 Test per le variabili di sessione esposte
WSTG-SESS-05 Test per contraffazione di richieste cross-site
WSTG-SESS-06 Test per la funzionalità di logout
WSTG-SESS-07 Timeout della sessione di test
WSTG-SESS-08 Test per il puzzle della sessione
WSTG-SESS-09 Test per il dirottamento della sessione

Test di convalida dei dati

Test di convalida dei dati Nome del test
WSTG-INPV-01 Test per Reflected Cross Site Scripting
WSTG-INPV-02 Test per Stored Cross Site Scripting
WSTG-INPV-03 Test per la manomissione dei verbi HTTP
WSTG-INPV-04 Test per l'inquinamento dei parametri HTTP
WSTG-INPV-05 Test per SQL Injection
WSTG-INPV-06 Test per l'iniezione di LDAP
WSTG-INPV-07 Test per l'iniezione XML
WSTG-INPV-08 Test per l'iniezione SSI
WSTG-INPV-09 Test per l'iniezione di XPath
WSTG-INPV-10 Test per IMAP SMTP Injection
WSTG-INPV-11 Test per l'iniezione di codice
WSTG-INPV-12 Test per l'iniezione di comandi
WSTG-INPV-13 Test per l'inserimento di stringhe di formato
WSTG-INPV-14 Test per la vulnerabilità incubata
WSTG-INPV-15 Test per il contrabbando di splitting HTTP
WSTG-INPV-16 Test per richieste HTTP in entrata
WSTG-INPV-17 Test per l'iniezione di intestazione host
WSTG-INPV-18 Test per l'iniezione di modelli lato server
WSTG-INPV-19 Test per contraffazione di richieste lato server

Gestione degli errori

Gestione degli errori Nome del test
WSTG-ERRH-01 Test per la gestione impropria degli errori
WSTG-ERRH-02 Test per le tracce dello stack

Crittografia

Crittografia Nome del test
WSTG-CRYP-01 Test per la sicurezza del livello di trasporto debole
WSTG-CRYP-02 Test per Padding Oracle
WSTG-CRYP-03 Test per informazioni sensibili inviate tramite canali non crittografati
WSTG-CRYP-04 Test per la crittografia debole

Test di logica aziendale

Test di logica aziendale Nome del test
WSTG-BUSL-01 Testare la convalida dei dati della logica aziendale
WSTG-BUSL-02 Prova la capacità di falsificare le richieste
WSTG-BUSL-03 Controlli di integrità del test
WSTG-BUSL-04 Test per i tempi di processo
WSTG-BUSL-05 Test Numero di volte che una funzione può essere utilizzata Limiti
WSTG-BUSL-06 Test per l'elusione dei flussi di lavoro
WSTG-BUSL-07 Testare le difese contro l'uso improprio delle applicazioni
WSTG-BUSL-08 Caricamento di prova di tipi di file imprevisti
WSTG-BUSL-09 Caricamento di prova di file dannosi

Test lato client

Test lato client Nome del test
WSTG-CLNT-01 Test per Cross Site Scripting basato su DOM
WSTG-CLNT-02 Test per l'esecuzione di JavaScript
WSTG-CLNT-03 Test per l'iniezione di HTML
WSTG-CLNT-04 Test per il reindirizzamento URL lato client
WSTG-CLNT-05 Test per l'iniezione di CSS
WSTG-CLNT-06 Test per la manipolazione delle risorse lato client
WSTG-CLNT-07 Testare la condivisione delle risorse tra le origini
WSTG-CLNT-08 Test per il lampeggiamento tra siti
WSTG-CLNT-09 Test per il clickjacking
WSTG-CLNT-10 Testare i WebSocket
WSTG-CLNT-11 Prova la messaggistica Web
WSTG-CLNT-12 Testare l'archiviazione del browser
WSTG-CLNT-13 Test per l'inclusione di script tra siti

Test API

Test API Nome del test
WSTG-APIT-01 Testare GraphQL

Controllo dell'ordine da Sayfer





    Questo sito è protetto da reCAPTCHA e Google Informativa sulla Privacy ed Termini di Servizio applicare.

    Risultati della valutazione della sicurezza

    Gli URL RPC sono definiti come wsRpcUrl durante l'utilizzo di HTTP

    ID DIRE-01
    Stato dei servizi Apri
    Rischio Medio
    Impatto sul business È difficile determinare l'impatto senza una demo funzionante. Se la modifica è errata, potrebbe interrompere lo snap, altrimenti si tratta di un semplice problema di documentazione/denominazione delle variabili.
    Dove packages/snap/src/configuration/prefined.ts:11,22,33

    Descrizione

    Gli URL RPC dei singoli protocolli sono stati modificati nell'ultima versione dello snap. Viene utilizzato HTTP (http://) invece di WebSocket (wss://).

    Questo è inaspettato, perché il documentazione ufficiale di Polkadot indica solo gli indirizzi websocket nelle loro risorse. Inoltre, in molti punti del codice, i nomi delle variabili contengono ancora il prefisso ws, come wsRpcurl.

    predefinito.ts:

    wsRpcUrl: 'https: /
    
    wsRpcUrl: 'https: /kusama-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /westend-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /rpc.polkadot.io/'
    

    Mitigazione

    Assicurarsi che venga utilizzato il protocollo HTTP. In tal caso, modificare la documentazione ufficiale per riflettere ciò e modificare i nomi delle variabili pertinenti.

     

    Conformazioni per le funzionalità principali non vengono gestite se rifiutate

    ID DIRE-02
    Stato dei servizi Apri
    Rischio Medio
    Impatto sul business Se l'utente rifiuta la transazione, non verrà restituito nulla, il che si concluderà con un errore JavaScript, di tipo generico indefinito messaggio o niente del tutto. Ciò potrebbe causare un comportamento indefinito o imprevisto.
    Dove – packages/snap/src/rpc/exportSeed.ts:14
    – packages/snap/src/rpc/substrate/sign.ts:33,53

    Descrizione

    Per le funzionalità chiave di Snap (come la visualizzazione della chiave privata o la firma di un messaggio), vengono visualizzate finestre di dialogo in cui l'utente può confermare se è a conoscenza di ciò che sta accettando. Se l'utente conferma la transazione, questa viene eseguita. Il contrario, quando l'utente rifiuta la transazione, non viene gestito affatto.

    exportSeed(SnapsGlobalObject), nota come non esiste nessun altro blocco

    if (confirmation) {
        const bip44Node = (await snap.request({
        method: "snap_getBip44Entropy",
        params: { coinType: kusamaCoinType },
    })) as JsonBIP44CoinTypeNode;
    

    signPayloadJSON(SnapsGlobalObject, ApiPromise, SignerPayloadJSON)

    if (confirmation) {
        const extrinsic = api.registry.createType('ExtrinsicPayload', payload, { version: payload.version });
        return extrinsic.sign(keyPair);
    }
    

    signPayloadRaw(SnapsGlobalObject, ApiPromise, SignerPayloadRaw)

    if (confirmation) {
        const signedBytes = keyPair.sign(hexToU8a(payload.data));
        return {
        signature: u8aToHex(signedBytes)
    };
    

    Purtroppo, poiché i test automatizzati non hanno funzionato, non abbiamo potuto verificare e confermare definitivamente questo scenario.

    Mitigazione

    Gestisci il file altro caso in cui l'utente rifiuta la transazione, nel qual caso dovrebbe essere visualizzato un errore appropriato.

     

    Nessuna finestra di dialogo di conferma durante l'invio

    ID DIRE-03
    Stato dei servizi Apri
    Rischio Basso
    Impatto sul business Senza una finestra di dialogo di conferma, c'è il rischio che un potenziale utente esegua erroneamente una transazione inviando fondi al conto sbagliato.
    Dove – pacchetti/snap/src/rpc/send.ts:7-34

    Descrizione

    Quando si firmano messaggi o si visualizza la chiave privata, lo snap visualizza una finestra di dialogo che chiede all'utente se è sicuro di voler procedere. Tuttavia, durante l'invio non viene visualizzata alcuna finestra di dialogo di conferma.

    Mitigazione

    Implementare una finestra di dialogo che chiede all'utente di confermare la transazione.

     

    abilitaPolkadotSnap Restituisce un errore quando si utilizza l'impostazione predefinita nome della rete

    ID DIRE-04
    Stato dei servizi Apri
    Rischio Basso
    Impatto sul business Non conformità con i presupposti aziendali secondo cui Westend è la rete predefinita.
    Dove – packages/adapter/src/index.ts:27-29

    Descrizione

    È stato notato che, nonostante abbia selezionato Westend come rete predefinita in snap/src/configuration/prefined.ts, se l'adattatore esegue la sua unica funzione esposta, EnablePolkadotSnap(), senza specificare config.networkName, verrà restituito un errore.

    Ciò non è coerente con i presupposti di Snap, descritti tra gli altri nel README.md dell'adattatore, che indica che la specifica di una configurazione sovrascriverà quella predefinita.

    pacchetti/snap/src/configuration/prefined.ts; righe 13-22, 35

    
    export const westendConfiguration: SnapConfig = {
        addressPrefix: 42,
        networkName: "westend",
        unit: {
            decimals: 12,
            image: "https: /svgshare.com/i/L2d.svg",
            symbol: "WND",
        },
        wsRpcUrl: "wss: /westend-rpc.polkadot.io/",
    };
    [ .]
    export const defaultConfiguration: SnapConfig = westendConfiguration;
    

    pacchetti/snap/src/configuration/prefined.ts; righe 27-29

    if (!config.networkName) {
    throw new Error("Configuration must at least define network type");
    }
    
    

    Mitigazione

    A giudicare dalla documentazione e dal codice in predefinito.ts, questo errore non deve essere restituito e deve essere utilizzato Westend. Al contrario, Westend non dovrebbe essere impostato come predefinito e la documentazione dovrebbe essere modificata per rifletterlo.

     

    Demo non funzionante

    ID DIRE-05
    Stato dei servizi Apri
    Rischio Informativo
    Impatto sul business Avere una demo funzionante può aiutare gli utenti a testare la funzionalità di Snap e aiutare gli auditor a migliorare notevolmente i propri test.
    Dove -

    Descrizione

    Secondo la documentazione, il comando yarn install & yarn run demo should run a working demo di Snap, permettendoti di installarlo e di utilizzare le varie funzionalità. Sfortunatamente, durante l'installazione, la console del browser ha restituito un errore. Pertanto, la verifica di Snap come “organismo vivente” era impossibile}

    Mitigazione

    Suggeriamo di portare Snap in uno stato utilizzabile e quindi di condurre test approfonditi su transazioni reali con la rete Polkadot.

    Puoi trovare maggiori informazioni a riguardo sul nostro Blog

    Il blog di Sayfer si concentra su web3, sicurezza e ricerca sulle vulnerabilità. Riteniamo che nel settore della sicurezza informatica sia fondamentale rimanere aggiornati sulle ultime tendenze e progressi. Attualmente, il nostro team di ricercatori esperti si diverte a ricercare tecnologie blockchain e web3 all'avanguardia.
    Contattaci

    Rimaniamo in contatto

    Dove
    Tel Aviv, Israele
    messaggeri:
    Non esitate a contattarci, saremo lieti di rispondere!





      Questo sito è protetto da reCAPTCHA e Google Informativa sulla Privacy ed Termini di Servizio applicare.
      Salta al contenuto