MetaMask Snap revisionsrapport til Polkadot

Ledelsesoversigt

Polkadot kontaktede Sayfer Security for at udføre en sikkerhedsrevision af Polkadots Metamask Snap-applikation i august 2023.

Inden vi vurderede ovenstående tjenester, holdt vi et kickoff-møde med det tekniske team og fik et overblik over systemet og målene for denne forskning.

I løbet af undersøgelsesperioden på 2 uger opdagede vi 5 sårbarheder på tværs af snapsens kodebase.

Som konklusion bør flere rettelser implementeres efter rapporten, men systemets sikkerhedsposition er kompetent.

Risikometodologi

Hos Sayfer er vi forpligtet til at levere penetrationstest af højeste kvalitet til vores kunder. Det er derfor, vi har implementeret en omfattende risikovurderingsmodel for at evaluere alvoren af ​​vores resultater og give vores kunder de bedst mulige anbefalinger til afbødning.

Vores risikovurderingsmodel er baseret på to nøglefaktorer: IMPACT og SANDSYNLIGHED. Påvirkning refererer til den potentielle skade, der kan følge af et problem, såsom økonomisk tab, skade på omdømme eller et ikke-operativt system. Sandsynlighed refererer til sandsynligheden for, at et problem vil opstå under hensyntagen til faktorer som kompleksiteten af ​​angrebet og antallet af potentielle angribere.

Ved at kombinere disse to faktorer kan vi skabe en omfattende forståelse af den risiko, et bestemt problem udgør, og give vores kunder en klar og handlekraftig vurdering af problemets alvor. Denne tilgang giver os mulighed for at prioritere vores anbefalinger og sikre, at vores kunder får den bedst mulige rådgivning om, hvordan de beskytter deres forretning.

Risiko er defineret som følger:

Sårbarheder efter risiko

Høj – Direkte trussel mod vigtige forretningsprocesser.
Medium – Indirekte trussel mod vigtige forretningsprocesser eller delvis trussel mod forretningsprocesser.
Lav - Der er ingen direkte trussel. Sårbarheden kan udnyttes ved hjælp af andre sårbarheder.
Informational – Denne konstatering indikerer ikke sårbarhed, men angiver en kommentar, der giver besked om designfejl og ukorrekt implementering, der kan forårsage et problem i det lange løb.

Severity
# af problemer
Høj
0
Medium
2
Lav
2
Informational
1

Tilgang

Introduktion

Chainsafe kontaktede Sayfer for at udføre penetrationstest på Polkadots Metamask Snap-applikation.

Denne rapport dokumenterer forskningen udført af Sayfer rettet mod de udvalgte ressourcer, der er defineret under forskningsomfanget. Denne rapport viser især gennemgangen af ​​sikkerhedspositionen for de to MetaMask Snap-applikationer og deres omgivende infrastruktur og procesimplementeringer.

Vores gennemtrængningstestprojekts livscyklus:

01

Omfangsoversigt

02

Teknisk oversigt

03

Omfangsvalidering

04

Trusselsmodel

05

Sikkerhedsvurdering

06

Sikkerhedsvurdering

Omfangsoversigt

Under vores første møde og efter at have forstået virksomhedens behov, definerede vi applikationens omfang, der ligger på følgende URL'er, som omfanget af projektet:

Polkadot snap
Revisionsforpligtelse: 61787c6d2193e7ec6dee6cf3ecfae4b855717092
Rettelser forpligter:

Vores test blev udført i august 2023

Lad det ikke være for sent!

Start din revision med Sayfer

Omfangsvalidering

Vi startede med at sikre, at det omfang, som kunden definerede for os, var teknisk logisk. At beslutte, hvilket omfang der er det rigtige for et givet system, er en del af den indledende diskussion. At få det rigtige omfang er nøglen til at få maksimal forretningsværdi ud af forskningen.

Trusselsmodel

Under vores kickoff-møder med kunden definerede vi de vigtigste aktiver, som applikationen besidder.

Vi definerede, at den største aktuelle trussel mod systemet er stjålne brugermidler

Lad det ikke være for sent!

Start din revision med Sayfer

Sikkerhedsvurderingsmetode

Sayfer bruger OWASP WSTG som vores tekniske standard ved gennemgang af webapplikationer. Efter at have fået en grundig forståelse af systemet besluttede vi, hvilke OWASP-tests der kræves for at evaluere systemet.

Sikkerhedsvurdering

Efter at have forstået og defineret omfanget, udført trusselsmodellering og evalueret de korrekte test, der kræves for fuldt ud at kontrollere applikationen for sikkerhedsfejl, udførte vi vores sikkerhedsvurdering.

Beskrivelse af problemtabel

Udgavetitel

ID SIGE-??: Et ID for nem kommunikation om hver sårbarhed
Status Åben/fast/Anerkendt
Risiko Repræsenterer problemets risikofaktor. For yderligere beskrivelse henvises til Sårbarheder efter risiko sektion.
Virksomhedseffekt Den største risiko for sårbarheden på forretningsniveau.
Lokation URL'en eller filen, hvor dette problem blev opdaget. Problemer uden placering har ingen bestemt placering og refererer til produktet som helhed.

Beskrivelse

Her giver vi en kort beskrivelse af problemet og hvordan det opstod, de trin, vi tog for at finde eller udnytte det, sammen med proof of concept (hvis det er til stede), og hvordan dette problem kan påvirke produktet eller dets brugere.

Mitigation

Foreslåede løsningsmuligheder for dette problem og links til anbefalede websteder for yderligere afhjælpning.

Sikkerhedsvurdering

Følgende test blev udført under revision af systemet

Information Indsamling

Information Indsamling Testnavn
WSTG-INFO-01 Udfør søgemaskineopdagelse for informationslækage
WSTG-INFO-02 Fingeraftryk webserver
WSTG-INFO-03 Gennemgå webservermetafiler for informationslækage
WSTG-INFO-04 Opregn applikationer på webserver
WSTG-INFO-05 Gennemgå websideindhold for informationslækage
WSTG-INFO-06 Identificer applikationsindgangspunkter
WSTG-INFO-07 Kortlæg udførelsesstier gennem applikationen
WSTG-INFO-08 Fingerprint Web Application Framework
WSTG-INFO-09 Webapplikation med fingeraftryk
WSTG-INFO-10 Kortapplikationsarkitektur

Konfiguration og implementering af ledelsestest

Konfiguration og implementering af ledelsestest Testnavn
WSTG-CONF-01 Test netværksinfrastrukturkonfiguration
WSTG-CONF-02 Test applikationsplatformens konfiguration
WSTG-CONF-03 Test filudvidelseshåndtering for følsomme oplysninger
WSTG-CONF-04 Gennemgå gamle sikkerhedskopier og filer uden reference for følsomme oplysninger
WSTG-CONF-05 Opregn infrastruktur- og applikationsadministrationsgrænseflader
WSTG-CONF-06 Test HTTP-metoder
WSTG-CONF-07 Test HTTP Strict Transport Security
WSTG-CONF-08 Test RIA-politik på tværs af domæner
WSTG-CONF-09 Test filtilladelse
WSTG-CONF-10 Test for subdomæneovertagelse
WSTG-CONF-11 Test Cloud Storage

Identitetsstyringstest

Identitetsstyringstest Testnavn
WSTG-IDNT-01 Testrolledefinitioner
WSTG-IDNT-02 Test brugerregistreringsproces
WSTG-IDNT-03 Test kontoprovisioneringsproces
WSTG-IDNT-04 Test for kontooptælling og gættelig brugerkonto
WSTG-IDNT-05 Tester for svag eller uhåndhævet brugernavnpolitik

Autentificeringstest

Autentificeringstest Testnavn
WSTG-ATHN-01 Test af legitimationsoplysninger transporteret over en krypteret kanal
WSTG-ATHN-02 Test for standardlegitimationsoplysninger
WSTG-ATHN-03 Test for svag låsemekanisme
WSTG-ATHN-04 Test for omgåelse af godkendelsesskema
WSTG-ATHN-05 Test for sårbare Husk adgangskode
WSTG-ATHN-06 Test for svagheder i browsercache
WSTG-ATHN-07 Test for svag adgangskodepolitik
WSTG-ATHN-08 Test for svagt sikkerhedsspørgsmål svar
WSTG-ATHN-09 Test for svag adgangskodeændring eller nulstilling af funktioner
WSTG-ATHN-10 Test for svagere autentificering i alternativ kanal

Autorisationstest

Autorisationstest Testnavn
WSTG-ATHZ-01 Test af kataloggennemløbsfil inkluderer
WSTG-ATHZ-02 Test for omgåelse af autorisationsskema
WSTG-ATHZ-03 Test for privilegie-eskalering
WSTG-ATHZ-04 Test for usikre direkte objektreferencer

Sessionsstyringstest

Sessionsstyringstest Testnavn
WSTG-SESS-01 Test for Session Management Schema
WSTG-SESS-02 Test for cookies-attributter
WSTG-SESS-03 Test for sessionsfiksering
WSTG-SESS-04 Test for eksponerede sessionsvariabler
WSTG-SESS-05 Test for forfalskning af anmodninger på tværs af websteder
WSTG-SESS-06 Test for logout funktionalitet
WSTG-SESS-07 Timeout for testsession
WSTG-SESS-08 Test for Session Puzzle
WSTG-SESS-09 Test for sessionskapring

Datavalideringstest

Datavalideringstest Testnavn
WSTG-INPV-01 Test af reflekteret scripting på tværs af websteder
WSTG-INPV-02 Test for Stored Cross Site Scripting
WSTG-INPV-03 Test af HTTP-udsagnsordsmanipulation
WSTG-INPV-04 Test for HTTP-parameterforurening
WSTG-INPV-05 Test for SQL Injection
WSTG-INPV-06 Test for LDAP-injektion
WSTG-INPV-07 Test for XML-injektion
WSTG-INPV-08 Test for SSI-injektion
WSTG-INPV-09 Test for XPath-injektion
WSTG-INPV-10 Test for IMAP SMTP-injektion
WSTG-INPV-11 Test for kodeinjektion
WSTG-INPV-12 Test for kommandoinjektion
WSTG-INPV-13 Test for Format String Injection
WSTG-INPV-14 Test for inkuberet sårbarhed
WSTG-INPV-15 Test for HTTP-smugling
WSTG-INPV-16 Test for indgående HTTP-anmodninger
WSTG-INPV-17 Test for Host Header Injection
WSTG-INPV-18 Test af skabeloninjektion på serversiden
WSTG-INPV-19 Test for server-side anmodningsforfalskning

Fejlhåndtering

Fejlhåndtering Testnavn
WSTG-ERRH-01 Test for forkert fejlhåndtering
WSTG-ERRH-02 Test af stakspor

Kryptografi

Kryptografi Testnavn
WSTG-CRYP-01 Test for svag transportlagssikkerhed
WSTG-CRYP-02 Test af polstring Oracle
WSTG-CRYP-03 Test for følsomme oplysninger sendt via ukrypterede kanaler
WSTG-CRYP-04 Test for svag kryptering

Test af forretningslogik

Test af forretningslogik Testnavn
WSTG-BUSL-01 Test Business Logic Data Validering
WSTG-BUSL-02 Test evne til at forfalske anmodninger
WSTG-BUSL-03 Test integritetstjek
WSTG-BUSL-04 Test for procestiming
WSTG-BUSL-05 Test Antal gange, en funktion kan bruges Grænser
WSTG-BUSL-06 Test for omgåelse af arbejdsgange
WSTG-BUSL-07 Test forsvar mod applikationsmisbrug
WSTG-BUSL-08 Test upload af uventede filtyper
WSTG-BUSL-09 Test upload af ondsindede filer

Test på klientsiden

Test på klientsiden Testnavn
WSTG-CLNT-01 Test af DOM-baseret Cross Site Scripting
WSTG-CLNT-02 Test af JavaScript-udførelse
WSTG-CLNT-03 Test for HTML-injektion
WSTG-CLNT-04 Test af URL-omdirigering på klientsiden
WSTG-CLNT-05 Test for CSS-injektion
WSTG-CLNT-06 Test for klientsideressourcemanipulation
WSTG-CLNT-07 Test Cross Origin-ressourcedeling
WSTG-CLNT-08 Test for Cross Site Flashing
WSTG-CLNT-09 Test for Clickjacking
WSTG-CLNT-10 Test af WebSockets
WSTG-CLNT-11 Test webmeddelelser
WSTG-CLNT-12 Test af browserlagring
WSTG-CLNT-13 Test for Cross Site Script-inkludering

API-testning

API-testning Testnavn
WSTG-APIT-01 Test af GraphQL

Bestil revision hos Sayfer

    Dette websted er beskyttet af reCAPTCHA og Google Privatlivspolitik og Servicevilkår ansøge.

    Sikkerhedsvurderingsresultater

    RPC URL'er er defineret som wsRpcUrl mens du bruger HTTP

    ID SIG-01
    Status Åbne
    Risiko Medium
    Virksomhedseffekt Det er svært at bestemme effekten uden en fungerende demo. Hvis ændringen er fejlagtig, kan den bryde snappet, ellers er dette et simpelt dokumentations-/variabelnavngivningsproblem.
    Lokation packages/snap/src/configuration/predefined.ts:11,22,33

    Beskrivelse

    RPC-URL'erne for individuelle protokoller er blevet ændret i den seneste version af snap. HTTP (http://) bruges i stedet for WebSocket (wss://).

    Dette er uventet, fordi officiel Polkadot-dokumentation angiver kun websocket-adresser i deres ressourcer. Derudover indeholder variabelnavne mange steder i koden stadig ws-præfikset, såsom wsRpcurl.

    foruddefineret.ts:

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

    Mitigation

    Sørg for, at HTTP-protokollen formodes at blive brugt. Hvis det er det, skal du ændre den officielle dokumentation for at afspejle dette, og ændre de relevante variabelnavne.

     

    Konformationer for nøglefunktioner håndteres ikke, når de afvises

    ID SIG-02
    Status Åbne
    Risiko Medium
    Virksomhedseffekt Hvis brugeren afslår transaktionen, vil der ikke blive returneret noget, hvilket vil ende med en JavaScript-fejl, en generisk undefined besked eller slet ingenting. Dette kan forårsage udefineret eller uventet adfærd.
    Lokation – packages/snap/src/rpc/exportSeed.ts:14
    – packages/snap/src/rpc/substrate/sign.ts:33,53

    Beskrivelse

    For nøgle Snap-funktioner (såsom visning af den private nøgle eller signering af en besked), vises dialogbokse, så brugeren kan bekræfte, om de er klar over, hvad de accepterer. Hvis brugeren bekræfter transaktionen, udføres den. Det omvendte, når brugeren afviser transaktionen, håndteres slet ikke.

    exportSeed(SnapsGlobalObject), bemærk, hvordan der ikke er nogen anden blok

    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)
    };
    

    Desværre, da de automatiserede tests ikke virkede, kunne vi ikke definitivt bekræfte og bekræfte dette scenarie.

    Mitigation

    Håndter andet tilfælde, hvor brugeren afviser transaktionen, i hvilket tilfælde en passende fejl skal vises.

     

    Ingen bekræftelsesdialog ved afsendelse

    ID SIG-03
    Status Åbne
    Risiko Lav
    Virksomhedseffekt Uden en bekræftelsesdialog er der risiko for, at en potentiel bruger fejlagtigt udfører en transaktion og sender penge til den forkerte konto.
    Lokation – packages/snap/src/rpc/send.ts:7-34

    Beskrivelse

    Når du signerer beskeder eller viser den private nøgle, viser snappen en dialogboks, der spørger brugeren, om de er sikre på, at de vil fortsætte. Der vises dog ingen sådan bekræftelsesdialog ved afsendelse.

    Mitigation

    Implementer en dialogboks, der beder brugeren om at bekræfte transaktionen.

     

    aktiver PolkadotSnap Returnerer en fejl ved brug af standarden netværksnavn

    ID SIG-04
    Status Åbne
    Risiko Lav
    Virksomhedseffekt Manglende overholdelse af forretningsantagelser om, at Westend er standardnetværket.
    Lokation – packages/adapter/src/index.ts:27-29

    Beskrivelse

    Det er blevet bemærket, at trods valg af Westend som standardnetværk i snap/src/configuration/predefined.ts, hvis adapteren udfører sin eneste udsatte funktion, enablePolkadotSnap(), uden at angive config.networkName, vil der blive returneret en fejl.

    Dette er ikke i overensstemmelse med Snaps antagelser, beskrevet blandt andet i README.md af adapteren, hvilket indikerer, at specificering af en konfiguration vil tilsidesætte standardkonfigurationen.

    packages/snap/src/configuration/predefined.ts; linje 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;
    

    packages/snap/src/configuration/predefined.ts; linje 27-29

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

    Mitigation

    At dømme efter dokumentationen og koden i foruddefineret.ts, denne fejl skal ikke returneres, og Westend skal bruges. Omvendt bør Westend ikke indstilles som standard, og dokumentationen skal ændres for at afspejle det.

     

    Ikke-fungerende demo

    ID SIG-05
    Status Åbne
    Risiko Informational
    Virksomhedseffekt At have en fungerende demo kan både hjælpe brugere med at teste funktionaliteten af ​​Snap og hjælpe revisorer med at forbedre deres test i høj grad.
    Lokation -

    Beskrivelse

    Ifølge dokumentationen er kommandoen yarn install & yarn run demo should run a working demo af Snap, så du kan installere det og bruge de forskellige funktioner. Under installationen returnerede browserkonsollen desværre en fejl. Verifikationen af ​​Snap som en "levende organisme" var således umulig}

    Mitigation

    Vi foreslår at bringe Snap til en brugbar tilstand og derefter udføre dybdegående test af rigtige transaktioner med Polkadot-netværket.

    Du kan finde mere information om det på vores blog

    Sayfers blog fokuserer på web3, sikkerhed og sårbarhedsforskning. Vi tror på, at det i cybersikkerhedsindustrien er afgørende at holde sig opdateret på de seneste trends og fremskridt. I øjeblikket nyder vores team af erfarne forskere at forske i banebrydende blockchain- og web3-teknologier.
    Kontakt os

    Hold kontakten

    Lokation
    Tel Aviv, Israel
    messengers:
    Du er velkommen til at kontakte os, vi vil med glæde svare!

      Dette websted er beskyttet af reCAPTCHA og Google Privatlivspolitik og Servicevilkår ansøge.
      Spring til indhold