Ledningssammanfattning
Tezos kontaktade Sayfer Security för att utföra en säkerhetsrevision av Tezos MetaMask Snap.
Innan vi utvärderade ovanstående tjänster höll vi ett kickoffmöte med Tezos tekniska team och fick en översikt över systemet och målen för denna forskning.
Under forskningsperioden på 2 veckor upptäckte vi 4 fynd i systemet.
Sammanfattningsvis bör flera korrigeringar implementeras efter rapporten, men systemets säkerhetsställning är kompetent.
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.
Tillvägagångssätt
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 | OWASP ID för problemet. Ytterligare tester som vi genomför och som inte ingår i OWASP-tabellen kommer att ha Sayfer ID. Exempel-ID: WSTG-INFO-002 WSTG – Testguide för webbsäkerhet. INFO – En stenografi för det ämne som frågan hör till. 002 – Utgivningsnummer. |
| Risk | Representerar riskfaktorn för problemet. För ytterligare beskrivning se Sårbarheter efter risk sektion. |
| Obligatorisk skicklighet | Beskriver den färdighetsnivå som krävs för att genomföra framgångsrik exploatering. Ju lägre kunskapsnivå desto lättare är exploateringsförfarandet. |
| OWASP Hänvisning |
En länk till den relevanta OWASP-sidan för ytterligare kunskap. |
| Plats | Webbadressen där problemet upptäcktes. Problem utan plats har ingen speciell plats och hänvisar till produkten som helhet. |
| Verktyg | Verktygen som används för att upptäcka problemet. |
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
Säkerhetsbedömningsresultat
Beroenden med kända sårbarheter
| ID | SÄG-01 |
| Status | Fast |
| Risk | Låg |
| Plats | - |
| Business Impact | Användning av sårbara versioner av nodmoduler kan utsätta tjänsten för olika attacker, vissa av dem mindre kritiska, men andra allvarliga. |
BESKRIVNING
NPM-granskningen returnerar flera resultat för kända sårbarheter i de installerade paketen:
npm audit
# npm audit report
engine.io 5.1.0 - 6.4.1
Severity: moderate
engine.io Uncaught Exception vulnerability -
https://github.com/advisories/GHSA-q9mw-68c2-j6m5
fix available via `npm audit fix`
node_modules/engine.io
socket.io 4.1.0 - 4.6.0-alpha1
Depends on vulnerable versions of engine.io
node_modules/socket.io
gatsby 1.9.130 - 4.25.7 || 5.4.0-next.0 - 5.9.1
Depends on vulnerable versions of gatsby-cli
Depends on vulnerable versions of latest-version
Depends on vulnerable versions of socket.io
node_modules/gatsby
got <11.8.5
Severity: moderate
Got allows a redirect to a UNIX socket -
https://github.com/advisories/GHSA-pfrx-2q88-qq97
fix available via `npm audit fix`
node_modules/package-json/node_modules/got
package-json <=6.5.0
Depends on vulnerable versions of got
node_modules/package-json
latest-version 0.2.0 - 5.1.0
Depends on vulnerable versions of package-json
node_modules/latest-version
update-notifier 0.2.0 - 5.1.0
Depends on vulnerable versions of latest-version
node_modules/update-notifier
gatsby-cli 1.1.27 - 4.25.0
Depends on vulnerable versions of update-notifier
node_modules/gatsby-cli
13
request *
Severity: moderate
Server-Side Request Forgery in Request -
https://github.com/advisories/GHSA-p8p7-x288-28g6
fix available via `npm audit fix`
node_modules/request
node-gyp <=7.1.2
Depends on vulnerable versions of request
node_modules/@npmcli/run-script/node_modules/node-gyp
@npmcli/run-script 1.1.1 - 1.8.6
Depends on vulnerable versions of node-gyp
node_modules/@npmcli/run-script
@lavamoat/allow-scripts <=2.3.0
Depends on vulnerable versions of @npmcli/run-script
node_modules/@lavamoat/allow-scripts
socket.io-parser 4.0.4 - 4.2.2
Severity: high
Insufficient validation when decoding a Socket.IO packet -
https://github.com/advisories/GHSA-cqmj-92xf-r6r9
fix available via `npm audit fix`
node_modules/socket.io-parser
webpack 5.0.0 - 5.75.0
Severity: high
Cross-realm object access in Webpack 5 -
https://github.com/advisories/GHSA-hc6q-2mpp-qw7j
fix available via `npm audit fix`
node_modules/webpack
yaml 2.0.0-5 - 2.2.1
Severity: high
Uncaught Exception in yaml - https://github.com/advisories/GHSA-f9xv-q969-pqx4
fix available via `npm audit fix`
node_modules/yaml-loader/node_modules/yaml
Vi validerade var och en av dem för att se till att det inte påverkar produktionsbygget och fann att även de höggradiga inte har en direkt effekt på Tezos Snap. Även om detta innebär att det inte finns någon säkerhetsrisk just nu, kan nya funktioner eller nya sårbarheter inträffa i framtiden.
Mitigation
Det första steget skulle vara att uppdatera paketen till versionerna där det är möjligt. På en större bildnivå finns det ett behov av ett automatiserat system för att varna om nya sårbarheter och en process bör finnas på plats för att mildra dem när kritiska sådana uppstår.
Magiska siffror
| ID | SÄG-02 |
| Status | Fast |
| Risk | Upplysande |
| Plats | - |
| Business Impact | Magiska siffror påverkar kodläsbarheten. Utan inre kunskap verkar de vara ganska godtyckliga. |
BESKRIVNING
Under vår bedömning märkte vi användningen av till synes godtyckliga konstanter utan förklarande kommentarer:

I fallet ovan är det svårt att gissa vad som är anledningen till att dividera med 1000 eller multiplicera med 257 utan att veta hur protokollet och själva blockkedjan fungerar
Mitigation
Det anses vara god praxis att ge sådana hårdkodade konstanter beskrivande namn, och vid behov lägga till förklarande kommentarer.
Alarmerande metamask-prompt
| ID | SÄG-03 |
| Status | Fast |
| Risk | Upplysande |
| Plats | - |
| Business Impact | Den här typen av uppmaning kan avskräcka användare från att installera Snap |
BESKRIVNING
När du installerar Snap visas följande svårbegripliga metamask-prompt:

Mitigation
Det kanske inte är möjligt för Tezos att ändra denna ganska skrämmande uppmaning. Men eftersom det kan vara av intresse, beslutade vi att ta med denna fråga som information.
Alarmerande metamask-prompt
| ID | SÄG-04 |
| Status | Fast |
| Risk | Upplysande |
| Plats | - |
| Business Impact | Ingen |
BESKRIVNING
Under vår bedömning märkte vi denna kommentar, som antyder en viss osäkerhet, som kan peka på ett underliggande större problem

Vi undersökte och kunde inte verifiera vad som är problemet här som kommentaren hänvisar till.
Mitigation
Dessa kommentarer bör ändras eller tas bort på releaseversionen, eller om det finns ett djupare problem här, bör utvecklarna uppdatera logiken för varför detta
Bilaga A: Säkerhetsutvärderingsfixar
Efter en granskning av Sayfer-teamet kan vi bekräfta att alla sårbarheter har åtgärdats av Tezos-teamet
Initial commit hash: 0e0d653b85cbd11365771ad9c2ee5726b10a7d26
Fixar commit hash: 0d0c9381a1107c54647d927d4fe99694f332e24d




