Metamask Snap revisionsrapport för Qtum

Ledningssammanfattning

Qtum kontaktade Sayfer Security för att utföra penetrationstestning på Qtums MetaMask Snap 05/2024.

Innan vi bedömde ovanstående tjänster höll vi ett kickoffmöte med Qtums tekniska team och fick en översikt över systemet och målen för denna forskning.

Under forskningsperioden på 2 veckor upptäckte vi 5 sårbarheter i systemet, ingen av dem kritisk.

Sammanfattningsvis bör flera korrigeringar implementeras efter rapporten, men systemets säkerhetsställning är kompetent.

Efter en granskning av Sayfer-teamet intygar vi att alla säkerhetsproblem som nämns i denna rapport har åtgärdats av Qtum-teamet.

Riskmetodik

På Sayfer har vi åtagit oss att leverera penetrationstestning av högsta kvalitet till våra kunder. Det är därför vi har implementerat en omfattande riskbedömningsmodell för att utvärdera hur allvarliga våra fynd är och ge våra kunder bästa möjliga rekommendationer för begränsning.

Vår riskbedömningsmodell bygger på två nyckelfaktorer: IMPACT och SANNOLIKHET. Påverkan hänvisar till den potentiella skada som kan bli följden av ett problem, såsom ekonomisk förlust, skada på rykte eller ett icke-operativt system. Sannolikhet avser sannolikheten att ett problem kommer att inträffa, med hänsyn till faktorer som attackens komplexitet och antalet potentiella angripare.

Genom att kombinera dessa två faktorer kan vi skapa en heltäckande förståelse för risken för en viss fråga och ge våra kunder en tydlig och handlingsbar bedömning av problemets allvar. Detta tillvägagångssätt gör att vi kan prioritera våra rekommendationer och säkerställa att våra kunder får bästa möjliga råd om hur de kan skydda sin verksamhet.

Risk definieras enligt följande:

Sårbarheter efter risk

Hög – Direkt hot mot viktiga affärsprocesser.
Medium – Indirekt hot mot viktiga affärsprocesser eller partiellt hot mot affärsprocesser.
Låg – Det finns inget direkt hot. Sårbarheten kan utnyttjas med andra sårbarheter.
Upplysande – Detta fynd indikerar inte sårbarhet, men anger en kommentar som meddelar om designfel och felaktig implementering som kan orsaka problem i det långa loppet.

Svårighetsgraden
# problem
Hög
0
Medium
0
Låg
3
Upplysande
2

Tillvägagångssätt

Beskrivning

Qtum kontaktade Sayfer för att utföra penetrationstestning av deras MetaMask Snap-applikation.

Denna rapport dokumenterar den forskning som Sayfer utfört med inriktning på de utvalda resurserna som definieras under forskningsomfattningen. Speciellt visar den här rapporten säkerhetsställningsgranskningen för Qtums MetaMask Snap-applikation och dess omgivande infrastruktur och processimplementeringar.

Vårt penetrationstestprojekts livscykel:

01

Omfattningsöversikt

02

Teknisk översikt

03

Omfattningsvalidering

04

Hotmodell

05

Säkerhetsutvärdering

06

Säkerhetsbedömning

Omfattningsöversikt

Under vårt första möte och efter att ha förstått företagets behov definierade vi applikationens omfattning som finns på följande webbadresser som omfattningen av projektet:

  • Qtums MetaMask Snap

Våra tester utfördes från 24/05/2024 till 07/06/2024.

Låt det inte vara för sent!

Börja din revision med Sayfer

Omfattningsvalidering

Vi började med att se till att den omfattning som kunden definierade för oss var tekniskt logisk.
Att bestämma vilken omfattning som är rätt för ett givet system är en del av den inledande diskussionen. Att få rätt omfattning är nyckeln till att få maximalt affärsvärde från forskningen.

Hotmodell

Under våra kickoffmöten med kunden definierade vi de viktigaste tillgångarna som applikationen besitter.
Vi definierade att det största aktuella hotet mot systemet is läckage av känslig användarinformation.

Låt det inte vara för sent!

Börja din revision med Sayfer

Säkerhetsutvärderingsmetodik

Sayfer använder OWASP WSTG som vår tekniska standard vid granskning av webbapplikationer. Efter att ha fått en grundlig förståelse av systemet bestämde vi oss för vilka OWASP-tester som krävs för att utvärdera systemet.

Säkerhetsbedömning

Efter att ha förstått och definierat omfattningen, utfört hotmodellering och utvärderat de korrekta testerna som krävs för att fullständigt kontrollera applikationen för säkerhetsbrister, utförde vi vår säkerhetsbedömning.

Problemtabell Beskrivning

Nummertitel

ID SÄGA-??: Ett ID för enkel kommunikation om varje sårbarhet
Status Öppen/Fastad/Bekräftad
Risk Representerar riskfaktorn för problemet. För ytterligare beskrivning se Sårbarheter efter risk sektion.
Business Impact Den största risken för sårbarheten på affärsnivå.
Plats URL:en eller filen där problemet upptäcktes. Problem utan plats har ingen speciell plats och hänvisar till produkten som helhet.

BESKRIVNING

Här ger vi en kort beskrivning av problemet och hur det uppstod, stegen vi gjorde för att hitta eller utnyttja det, tillsammans med proof of concept (om det finns) och hur detta problem kan påverka produkten eller dess användare.

Mitigation

Föreslagna lösningsalternativ för det här problemet och länkar till rekommenderade webbplatser för ytterligare åtgärdande.

Säkerhetsutvärdering

Följande tester utfördes under revision av systemet

Informationsmöte

Informationsmöte Testnamn
WSTG-INFO-01 Genomför sökmotorupptäcktsspaning för informationsläckage
WSTG-INFO-02 Fingeravtryck webbserver
WSTG-INFO-03 Granska webbservermetafiler för informationsläckage
WSTG-INFO-04 Räkna upp applikationer på webbservern
WSTG-INFO-05 Granska webbsidans innehåll för informationsläckage
WSTG-INFO-06 Identifiera applikationsingångspunkter
WSTG-INFO-07 Kartlägg exekveringsvägar genom applikation
WSTG-INFO-08 Fingerprint Web Application Framework
WSTG-INFO-09 Webbapplikation med fingeravtryck
WSTG-INFO-10 Kartapplikationsarkitektur

Konfigurations- och distributionshanteringstestning

Konfigurations- och distributionshanteringstestning Testnamn
WSTG-CONF-01 Testa nätverksinfrastrukturens konfiguration
WSTG-CONF-02 Testa applikationsplattformens konfiguration
WSTG-CONF-03 Testa filtilläggshantering för känslig information
WSTG-CONF-04 Granska gamla säkerhetskopior och filer utan referens för känslig information
WSTG-CONF-05 Räkna upp gränssnitt för infrastruktur och applikationsadministration
WSTG-CONF-06 Testa HTTP-metoder
WSTG-CONF-07 Testa HTTP Strict Transport Security
WSTG-CONF-08 Testa RIA-policy över flera domäner
WSTG-CONF-09 Testa filbehörighet
WSTG-CONF-10 Testa för övertagande av underdomän
WSTG-CONF-11 Testa molnlagring

Identitetshanteringstestning

Identitetshanteringstestning Testnamn
WSTG-IDNT-01 Testrollsdefinitioner
WSTG-IDNT-02 Testa användarregistreringsprocessen
WSTG-IDNT-03 Testa kontotilldelningsprocessen
WSTG-IDNT-04 Testa för kontouppräkning och gissningsbart användarkonto
WSTG-IDNT-05 Testar för svag eller otillämpad användarnamnspolicy

Autentiseringstest

Autentiseringstest Testnamn
WSTG-ATHN-01 Testa för inloggningsuppgifter som transporteras över en krypterad kanal
WSTG-ATHN-02 Testar för standardinloggningsuppgifter
WSTG-ATHN-03 Testar för svag låsningsmekanism
WSTG-ATHN-04 Testar för att kringgå autentiseringsschema
WSTG-ATHN-05 Testa för sårbara Kom ihåg lösenord
WSTG-ATHN-06 Testar för svagheter i webbläsarens cache
WSTG-ATHN-07 Testar för svag lösenordspolicy
WSTG-ATHN-08 Testa för svag säkerhetsfråga Svar
WSTG-ATHN-09 Testar för svaga lösenordsändringar eller återställningsfunktioner
WSTG-ATHN-10 Testar för svagare autentisering i alternativ kanal

Tillståndstest

Tillståndstest Testnamn
WSTG-ATHZ-01 Testa kataloggenomgångsfil inkluderar
WSTG-ATHZ-02 Testa för att förbigå auktoriseringsschema
WSTG-ATHZ-03 Testar för privilegieupptrappning
WSTG-ATHZ-04 Testa för osäkra direkta objektreferenser

Test av sessionhantering

Test av sessionhantering Testnamn
WSTG-SESS-01 Testning för Session Management Schema
WSTG-SESS-02 Testa för cookiesattribut
WSTG-SESS-03 Testning för sessionsfixering
WSTG-SESS-04 Testa för exponerade sessionsvariabler
WSTG-SESS-05 Testar för förfalskning av förfrågningar mellan webbplatser
WSTG-SESS-06 Testar för utloggningsfunktioner
WSTG-SESS-07 Timeout för testsession
WSTG-SESS-08 Testa för sessionspussel
WSTG-SESS-09 Testar för sessionskapning

Datavalideringstest

Datavalideringstest Testnamn
WSTG-INPV-01 Testa för Reflekterad Cross Site Scripting
WSTG-INPV-02 Testning för lagrad cross Site Scripting
WSTG-INPV-03 Testar för manipulering av HTTP-verb
WSTG-INPV-04 Testar för HTTP-parameterförorening
WSTG-INPV-05 Testa för SQL Injection
WSTG-INPV-06 Testning för LDAP-injektion
WSTG-INPV-07 Testa för XML-injektion
WSTG-INPV-08 Testning för SSI Injection
WSTG-INPV-09 Testar för XPath-injektion
WSTG-INPV-10 Testar för IMAP SMTP-injektion
WSTG-INPV-11 Testning för kodinsprutning
WSTG-INPV-12 Testning för kommandoinjektion
WSTG-INPV-13 Testa för formatsträngsinjektion
WSTG-INPV-14 Testa för inkuberad sårbarhet
WSTG-INPV-15 Testar för HTTP-delningssmuggling
WSTG-INPV-16 Testar för inkommande HTTP-förfrågningar
WSTG-INPV-17 Testning av Host Header Injection
WSTG-INPV-18 Testar för mallinjektion på serversidan
WSTG-INPV-19 Testar för förfalskning av förfrågningar på serversidan

Felhantering

Felhantering Testnamn
WSTG-ERRH-01 Testar för felaktig felhantering
WSTG-ERRH-02 Testar för stackspår

Kryptografi

Kryptografi Testnamn
WSTG-CRYP-01 Testning för svag transportlagersäkerhet
WSTG-CRYP-02 Testar för Padding Oracle
WSTG-CRYP-03 Testa för känslig information som skickas via okrypterade kanaler
WSTG-CRYP-04 Testar för svag kryptering

Affärslogiktestning

Affärslogiktestning Testnamn
WSTG-BUSL-01 Testa affärslogikdatavalidering
WSTG-BUSL-02 Testa förmåga att förfalska förfrågningar
WSTG-BUSL-03 Testa integritetskontroller
WSTG-BUSL-04 Testa för processtiming
WSTG-BUSL-05 Testa Antal gånger en funktion kan användas Gränser
WSTG-BUSL-06 Test för att kringgå arbetsflöden
WSTG-BUSL-07 Testa skydd mot felaktig användning av applikationer
WSTG-BUSL-08 Testuppladdning av oväntade filtyper
WSTG-BUSL-09 Testuppladdning av skadliga filer

Testning på klientsidan

Testning på klientsidan Testnamn
WSTG-CLNT-01 Testning för DOM-baserad Cross Site Scripting
WSTG-CLNT-02 Testa för JavaScript-exekvering
WSTG-CLNT-03 Testa för HTML-injektion
WSTG-CLNT-04 Testar för URL-omdirigering på klientsidan
WSTG-CLNT-05 Testar för CSS-injektion
WSTG-CLNT-06 Testning för resurshantering på klientsidan
WSTG-CLNT-07 Testa Cross Origin-resursdelning
WSTG-CLNT-08 Testar för Cross Site Flashing
WSTG-CLNT-09 Testar för Clickjacking
WSTG-CLNT-10 Testar WebSockets
WSTG-CLNT-11 Testa webbmeddelanden
WSTG-CLNT-12 Testar webbläsarlagring
WSTG-CLNT-13 Testa för inkludering av skript på flera webbplatser

API-testning

API-testning Testnamn
WSTG-APIT-01 Testar GraphQL

Beställ revision från Sayfer

    Den här webbplatsen är skyddad av reCAPTCHA och Google Integritetspolicy och Användarvillkor tillämpa.

    Säkerhetsbedömningsresultat

    Ingen metod för att ta bort tillagda nätverk

    ID SÄG-01
    Status Fast
    Risk Låg
    Business Impact Det är inte möjligt att ta bort enskilda nätverk som lagts till från snappen.
    Plats – packages/snap/src/helpers.ts:105

    BESKRIVNING

    Koden implementerar möjligheten att lägga till ytterligare nätverk, vilket utökar deras lista utöver standard. Det noterades dock att det inte finns något sätt att ta bort dem förutom genom att installera om snappen. Denna funktionalitet var förmodligen planerad, eftersom det finns en removeNetwork()-funktion, men det är inte möjligt att anropa den från allmänt tillgängliga metoder.

    export const networks = {
        get: getNetworks,
        setCurrent: setCurrentNetwork,
        add: addNetwork,
        remove: removeNetwork,
    };

    Mitigation

    Vi rekommenderar att du implementerar denna metod, som förmodligen var tänkt.

     

    Saknas bekräftelseprompt för export av privata nycklar

    ID SÄG-02
    Status Fast
    Risk Låg
    Business Impact Risk för att den privata nyckeln läcker när den av misstag visas på en skärm, till exempel på en offentlig plats.
    Plats – packages/snap/src/index.ts:145

    BESKRIVNING

    I de flesta kritiska funktionerna på ett ögonblick visas en dialogruta som informerar användaren om den åtgärd som utförs och begär deras godkännande.

    Denna säkerhetsåtgärd finns dock inte i WalletExportPrivateKey-metoden, den som används för att visa den privata nyckeln på snapskärmen. Om den anropas av misstag skulle den omedelbart visa den privata nyckeln.

    Mitigation

    Innan du visar den privata nyckeln, lägg till en bekräftelseprompt som begär användarens godkännande.

     

    Flera oimplementerade metoder

    ID SÄG-03
    Status Fast
    Risk Låg
    Business Impact Det finns en risk att några av metoderna som lämnats oimplementerade kan vara viktiga för snappens funktionalitet och av misstag förbises.
    Plats – packages/snap/src/index.ts:163, 169, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 472, 509, 541, 568, 574, 580, 586, 592, 609, 615, 637, 643, 649, 655 696, 735, 741, 747, 753, 759, 765, 771, 777, 783, XNUMX, XNUMX, XNUMX, XNUMX, XNUMX, XNUMX, XNUMX, XNUMX

    BESKRIVNING

    En stor del av metoderna som finns i snappen verkar lämnas oanvända. Endast pannplattan som omger dem finns, men ingen konkret logik.

    Mitigation

    Vi rekommenderar att du granskar de metoder du vill implementera i din snap och se till att de alla innehåller faktisk logik. Det ska inte vara möjligt för användaren att anropa onödiga metoder som du inte har för avsikt att implementera.

     

    Redundant kod

    ID SÄG-04
    Status Fast
    Risk Upplysande
    Business Impact Metoder som gör samma sak och returnerar samma data ökar i onödan storleken på snappens kodbas.
    Plats – packages/snap/src/index.ts:332, 338

    BESKRIVNING

    Under vår analys har vi märkt att två RPC-metoder, EthRequestAccounts och EthAccounts, verkar göra samma sak och returnera samma värden.

    case RPCMethods.EthRequestAccounts: {
        const wallet = await getWallet();
        return [wallet.address];
    }
    case RPCMethods.EthAccounts: {
        console.log('RPCMethods.EthAccounts');
        console.log('request.params', JSON.stringify(request.params));
        const wallet = await getWallet();
        return [wallet.address];
    }

    I båda fallen hämtar dessa metoder den aktiva plånbokens data genom att använda getWallet() och returnerar sedan dess adress. För närvarande är den enda skillnaden att EthAccounts loggar medan EthRequestAccounts inte gör det.

    Mitigation

    Överväg att antingen ta bort en av metoderna eller modifiera en för att skilja den från den andra

     

    Återstående TODO-kommentarer

    ID SÄG-05
    Status Fast
    Risk Upplysande
    Business Impact TODO-kommentarer och kommenterade kodavsnitt kan ge potentiella angripare värdefull information, förutom att de verkar oprofessionella.
    Plats – packages/snap/src/index.ts:460, 550
    – packages/snap/src/polyfill.ts:7
    – packages/snap/src/helpers/parsers/tx.ts:55

    BESKRIVNING

    Kodbasen innehåller flera TODO-kommentarer och även delar av kommenterad kod som inte längre används.

    Även om detta är acceptabelt i en testmiljö, bör det elimineras i produktionen. Sådana kommentarer kan ge en potentiell intressent värdefull information om saknade funktioner, säkerhetsåtgärder och utvecklares tankar, som kan användas för att profilera attacker.

    Mitigation

    Vi föreslår att du tar bort kommentarer markerade som TODO och oanvända kodfragment i din produktionsgren.

    Du kan hitta mer information om det på vår blogg

    Sayfers blogg fokuserar på webb3, säkerhet och sårbarhetsforskning. Vi tror att det inom cybersäkerhetsbranschen är avgörande att hålla sig uppdaterad om de senaste trenderna och framstegen. För närvarande gillar vårt team av erfarna forskare att forska i banbrytande blockchain- och web3-teknologier.
    Kontakta oss

    Hålla kontakten

    Plats
    Tel Aviv, Israel
    Messengers:
    Kontakta oss gärna, vi svarar gärna!

      Den här webbplatsen är skyddad av reCAPTCHA och Google Integritetspolicy och Användarvillkor tillämpa.
      Hoppa till innehåll