Management-Zusammenfassung
Qtum kontaktierte Sayfer Security, um im Mai 05 einen Penetrationstest für Qtums MetaMask Snap durchzuführen.
Bevor wir die oben genannten Dienste bewerteten, hielten wir ein Kickoff-Meeting mit dem technischen Team von Qtum ab und erhielten einen Überblick über das System und die Ziele dieser Untersuchung.
Während der zweiwöchigen Untersuchung entdeckten wir fünf Schwachstellen im System, keine davon kritisch.
Zusammenfassend lässt sich sagen, dass nach dem Bericht mehrere Korrekturen implementiert werden sollten, der Sicherheitsstatus des Systems jedoch angemessen ist.
Nach einer Überprüfung durch das Sayfer-Team bestätigen wir, dass alle in diesem Bericht erwähnten Sicherheitsprobleme vom Qtum-Team behoben wurden.
Risikomethodik
Bei Sayfer sind wir bestrebt, unseren Kunden Penetrationstests höchster Qualität anzubieten. Aus diesem Grund haben wir ein umfassendes Risikobewertungsmodell implementiert, um die Schwere unserer Ergebnisse zu bewerten und unseren Kunden die bestmöglichen Empfehlungen zur Risikominderung zu geben.
Unser Risikobewertungsmodell basiert auf zwei Schlüsselfaktoren: IMPACT , WAHRSCHEINLICHKEIT. Auswirkungen beziehen sich auf den potenziellen Schaden, der aus einem Problem resultieren könnte, beispielsweise finanzieller Verlust, Rufschädigung oder ein nicht betriebsbereites System. Die Wahrscheinlichkeit bezieht sich auf die Wahrscheinlichkeit, dass ein Problem auftritt, unter Berücksichtigung von Faktoren wie der Komplexität des Angriffs und der Anzahl potenzieller Angreifer.
Durch die Kombination dieser beiden Faktoren können wir ein umfassendes Verständnis des von einem bestimmten Problem ausgehenden Risikos schaffen und unseren Kunden eine klare und umsetzbare Einschätzung der Schwere des Problems liefern. Dieser Ansatz ermöglicht es uns, unsere Empfehlungen zu priorisieren und sicherzustellen, dass unsere Kunden die bestmögliche Beratung zum Schutz ihres Unternehmens erhalten.
Risiko wird wie folgt definiert:

Schwachstellen nach Risiko
Hoch – Direkte Bedrohung wichtiger Geschäftsprozesse.
Medium – Indirekte Bedrohung wichtiger Geschäftsprozesse oder partielle Bedrohung von Geschäftsprozessen.
Niedrig – Es besteht keine direkte Bedrohung. Die Schwachstelle kann mit anderen Schwachstellen ausgenutzt werden.
Informational – Dieser Befund weist nicht auf eine Schwachstelle hin, sondern gibt einen Kommentar an, der auf Designfehler und unsachgemäße Implementierung hinweist, die auf lange Sicht ein Problem verursachen könnten.
Ansatz
Methodik der Sicherheitsbewertung
Sayfer verwendet OWASP WSTG als unser technischer Standard bei der Überprüfung von Webanwendungen. Nachdem wir uns ein gründliches Verständnis des Systems angeeignet hatten, entschieden wir, welche OWASP-Tests erforderlich sind, um das System zu evaluieren.
Sicherheitsbewertung
Nachdem wir den Umfang verstanden und definiert, eine Bedrohungsmodellierung durchgeführt und die richtigen Tests bewertet hatten, die erforderlich waren, um die Anwendung vollständig auf Sicherheitslücken zu überprüfen, führten wir unsere Sicherheitsbewertung durch.
Beschreibung der Problemtabelle
Titel der Ausgabe
| ID | SAGEN-??: Eine ID zur einfachen Kommunikation zu jeder Schwachstelle |
| Status | Offen/Behoben/Bestätigt |
| Risiko | Stellt den Risikofaktor des Problems dar. Weitere Beschreibungen finden Sie im Schwachstellen nach Risiko . |
| Auswirkungen auf das Geschäft | Das Hauptrisiko der Sicherheitslücke liegt auf Unternehmensebene. |
| Standort | Die URL oder die Datei, in der dieses Problem erkannt wurde. Probleme ohne Standort haben keinen bestimmten Standort und beziehen sich auf das Produkt als Ganzes. |
Beschreibung
Hier geben wir eine kurze Beschreibung des Problems und seiner Entstehung, die Schritte, die wir unternommen haben, um es zu finden oder auszunutzen, zusammen mit einem Konzeptnachweis (falls vorhanden) und wie sich dieses Problem auf das Produkt oder seine Benutzer auswirken kann.
Mitigation
Vorgeschlagene Lösungsoptionen für dieses Problem und Links zu empfohlenen Websites zur weiteren Behebung.
Sicherheitsbewertung
Die folgenden Tests wurden während der Prüfung des Systems durchgeführt
Informationsbeschaffung
| Informationsbeschaffung | Testname |
| WSTG-INFO-01 | Führen Sie Search Engine Discovery Reconnaissance für Informationslecks durch |
| WSTG-INFO-02 | Fingerabdruck-Webserver |
| WSTG-INFO-03 | Überprüfen Sie Webserver-Metadateien auf Informationslecks |
| WSTG-INFO-04 | Anwendungen auf dem Webserver auflisten |
| WSTG-INFO-05 | Überprüfen Sie den Inhalt der Webseite auf Informationslecks |
| WSTG-INFO-06 | Identifizieren Sie Einstiegspunkte für Anwendungen |
| WSTG-INFO-07 | Ordnen Sie Ausführungspfade durch die Anwendung zu |
| WSTG-INFO-08 | Framework für Fingerabdruck-Webanwendungen |
| WSTG-INFO-09 | Fingerabdruck-Webanwendung |
| WSTG-INFO-10 | Kartenanwendungsarchitektur |
Konfigurations- und Deployment-Management-Tests
| Konfigurations- und Deployment-Management-Tests | Testname |
| WSTG-CONF-01 | Konfiguration der Netzwerkinfrastruktur testen |
| WSTG-CONF-02 | Testen Sie die Konfiguration der Anwendungsplattform |
| WSTG-CONF-03 | Testen Sie die Behandlung von Dateierweiterungen für vertrauliche Informationen |
| WSTG-CONF-04 | Überprüfen Sie alte Sicherungskopien und nicht referenzierte Dateien auf sensible Informationen |
| WSTG-CONF-05 | Zählen Sie Infrastruktur- und Anwendungsverwaltungsschnittstellen auf |
| WSTG-CONF-06 | HTTP-Methoden testen |
| WSTG-CONF-07 | Testen Sie HTTP Strict Transport Security |
| WSTG-CONF-08 | Testen Sie die domänenübergreifende RIA-Richtlinie |
| WSTG-CONF-09 | Dateiberechtigung testen |
| WSTG-CONF-10 | Test auf Subdomain-Übernahme |
| WSTG-CONF-11 | Cloud-Speicher testen |
Identitätsmanagement-Tests
| Identitätsmanagement-Tests | Testname |
| WSTG-IDNT-01 | Rollendefinitionen testen |
| WSTG-IDNT-02 | Registrierungsprozess für Testbenutzer |
| WSTG-IDNT-03 | Testkonto-Bereitstellungsprozess |
| WSTG-IDNT-04 | Testen auf Kontoaufzählung und erratbares Benutzerkonto |
| WSTG-IDNT-05 | Test auf schwache oder nicht erzwungene Richtlinie für Benutzernamen |
Authentifizierungstests
| Authentifizierungstests | Testname |
| WSTG-ATHN-01 | Testen auf Anmeldeinformationen, die über einen verschlüsselten Kanal transportiert werden |
| WSTG-ATHN-02 | Testen auf Standardanmeldeinformationen |
| WSTG-ATHN-03 | Prüfung auf schwachen Sperrmechanismus |
| WSTG-ATHN-04 | Testen auf Umgehung des Authentifizierungsschemas |
| WSTG-ATHN-05 | Testen auf anfälliges Passwort merken |
| WSTG-ATHN-06 | Testen auf Browser-Cache-Schwachstellen |
| WSTG-ATHN-07 | Testen auf Richtlinie für schwache Kennwörter |
| WSTG-ATHN-08 | Testen auf Schwache Sicherheitsfrage Antwort |
| WSTG-ATHN-09 | Testen auf schwache Funktionen zum Ändern oder Zurücksetzen von Passwörtern |
| WSTG-ATHN-10 | Testen auf schwächere Authentifizierung im alternativen Kanal |
Autorisierungstests
| Autorisierungstests | Testname |
| WSTG-ATHZ-01 | Testen von Directory Traversal File Include |
| WSTG-ATHZ-02 | Testen auf Umgehung des Autorisierungsschemas |
| WSTG-ATHZ-03 | Testen auf Rechteausweitung |
| WSTG-ATHZ-04 | Testen auf unsichere direkte Objektreferenzen |
Testen der Sitzungsverwaltung
| Testen der Sitzungsverwaltung | Testname |
| WSTG-SESS-01 | Testen für das Sitzungsverwaltungsschema |
| WSTG-SESS-02 | Testen auf Cookie-Attribute |
| WSTG-SESS-03 | Testen auf Sitzungsfixierung |
| WSTG-SESS-04 | Testen auf exponierte Sitzungsvariablen |
| WSTG-SESS-05 | Prüfung auf Cross-Site-Request-Forgery |
| WSTG-SESS-06 | Testen der Abmeldefunktion |
| WSTG-SESS-07 | Zeitüberschreitung der Testsitzung |
| WSTG-SESS-08 | Testen auf Session-Puzzling |
| WSTG-SESS-09 | Testen auf Session Hijacking |
Testen der Datenvalidierung
| Testen der Datenvalidierung | Testname |
| WSTG-INPV-01 | Testen auf reflektiertes Cross-Site-Scripting |
| WSTG-INPV-02 | Testen auf Stored Cross Site Scripting |
| WSTG-INPV-03 | Testen auf HTTP-Verb-Manipulation |
| WSTG-INPV-04 | Testen auf HTTP-Parameterverschmutzung |
| WSTG-INPV-05 | Testen auf SQL-Injection |
| WSTG-INPV-06 | Testen auf LDAP-Injection |
| WSTG-INPV-07 | Testen auf XML-Injection |
| WSTG-INPV-08 | Prüfung auf SSI-Einspritzung |
| WSTG-INPV-09 | Testen auf XPath-Injektion |
| WSTG-INPV-10 | Testen auf IMAP-SMTP-Injection |
| WSTG-INPV-11 | Testen auf Code-Injection |
| WSTG-INPV-12 | Testen auf Befehlsinjektion |
| WSTG-INPV-13 | Testen auf Format-String-Injection |
| WSTG-INPV-14 | Testen auf inkubierte Schwachstellen |
| WSTG-INPV-15 | Testen auf HTTP-Splitting-Schmuggel |
| WSTG-INPV-16 | Testen auf eingehende HTTP-Anforderungen |
| WSTG-INPV-17 | Testen auf Host-Header-Injektion |
| WSTG-INPV-18 | Testen auf serverseitige Vorlageninjektion |
| WSTG-INPV-19 | Testen auf serverseitige Anforderungsfälschung |
Fehlerbehandlung
| Fehlerbehandlung | Testname |
| WSTG-ERRH-01 | Testen auf unsachgemäße Fehlerbehandlung |
| WSTG-ERRH-02 | Testen auf Stack-Traces |
Cryptography
| Cryptography | Testname |
| WSTG-CRYP-01 | Testen auf schwache Transportschichtsicherheit |
| WSTG-CRYP-02 | Testen für Padding Oracle |
| WSTG-CRYP-03 | Prüfung auf sensible Informationen, die über unverschlüsselte Kanäle gesendet werden |
| WSTG-CRYP-04 | Testen auf schwache Verschlüsselung |
Testen der Geschäftslogik
| Testen der Geschäftslogik | Testname |
| WSTG-BUSL-01 | Testen Sie die Datenvalidierung der Geschäftslogik |
| WSTG-BUSL-02 | Testen Sie die Fähigkeit, Anfragen zu fälschen |
| WSTG-BUSL-03 | Integritätsprüfungen testen |
| WSTG-BUSL-04 | Testen Sie das Prozesstiming |
| WSTG-BUSL-05 | Testen Sie, wie oft eine Funktion verwendet werden kann |
| WSTG-BUSL-06 | Prüfung auf Umgehung von Arbeitsabläufen |
| WSTG-BUSL-07 | Testen Sie Abwehrmaßnahmen gegen Anwendungsmissbrauch |
| WSTG-BUSL-08 | Test-Upload von unerwarteten Dateitypen |
| WSTG-BUSL-09 | Test-Upload schädlicher Dateien |
Clientseitiges Testen
| Clientseitiges Testen | Testname |
| WSTG-CLNT-01 | Testen auf DOM-basiertes Cross-Site-Scripting |
| WSTG-CLNT-02 | Testen auf JavaScript-Ausführung |
| WSTG-CLNT-03 | Testen auf HTML-Injection |
| WSTG-CLNT-04 | Testen der clientseitigen URL-Umleitung |
| WSTG-CLNT-05 | Testen auf CSS-Injektion |
| WSTG-CLNT-06 | Testen auf clientseitige Ressourcenmanipulation |
| WSTG-CLNT-07 | Testen Sie die ursprungsübergreifende Ressourcenfreigabe |
| WSTG-CLNT-08 | Testen auf Cross-Site-Flashing |
| WSTG-CLNT-09 | Test auf Clickjacking |
| WSTG-CLNT-10 | Testen von WebSockets |
| WSTG-CLNT-11 | Testen Sie Web-Messaging |
| WSTG-CLNT-12 | Testen des Browserspeichers |
| WSTG-CLNT-13 | Testen auf Cross-Site-Skripteinbindung |
API-Tests
| API-Tests | Testname |
| WSTG-APIT-01 | Testen von GraphQL |
Audit bei Sayfer bestellen
Ergebnisse der Sicherheitsbewertung
Keine Methode zum Entfernen hinzugefügter Netzwerke
| ID | SAGEN-01 |
| Status | Behoben |
| Risiko | Niedrig |
| Auswirkungen auf das Geschäft | Es ist nicht möglich, einzelne hinzugefügte Netzwerke aus dem Snap zu entfernen. |
| Standort | – Pakete/Snap/src/helpers.ts:105 |
Beschreibung
Der Code ermöglicht das Hinzufügen zusätzlicher Netzwerke und erweitert deren Liste über die Standardliste hinaus. Es wurde jedoch darauf hingewiesen, dass diese nur durch eine Neuinstallation des Snaps entfernt werden können. Diese Funktionalität war wahrscheinlich geplant, da es zwar eine Funktion removeNetwork() gibt, diese aber nicht über öffentlich verfügbare Methoden aufgerufen werden kann.
export const networks = {
get: getNetworks,
setCurrent: setCurrentNetwork,
add: addNetwork,
remove: removeNetwork,
};
Mitigation
Wir empfehlen, diese Methode zu implementieren, wie es wahrscheinlich beabsichtigt war.
Fehlende Bestätigungsaufforderung zum Exportieren privater Schlüssel
| ID | SAGEN-02 |
| Status | Behoben |
| Risiko | Niedrig |
| Auswirkungen auf das Geschäft | Es besteht das Risiko, dass der private Schlüssel preisgegeben wird, wenn er irrtümlicherweise auf einem Bildschirm angezeigt wird, beispielsweise an einem öffentlichen Ort. |
| Standort | – Pakete/Snap/src/index.ts:145 |
Beschreibung
Bei den meisten kritischen Funktionen im Snap wird ein Dialogfeld angezeigt, das den Benutzer über die ausgeführte Aktion informiert und um seine Zustimmung bittet.
Diese Sicherheitsmaßnahme fehlt jedoch in der Methode WalletExportPrivateKey, die zur Anzeige des privaten Schlüssels auf dem Snap-Bildschirm verwendet wird. Bei einem versehentlichen Aufruf würde der private Schlüssel sofort angezeigt.
Mitigation
Fügen Sie vor der Anzeige des privaten Schlüssels eine Bestätigungsaufforderung hinzu, in der Sie die Zustimmung des Benutzers einholen.
Mehrere nicht implementierte Methoden
| ID | SAGEN-03 |
| Status | Behoben |
| Risiko | Niedrig |
| Auswirkungen auf das Geschäft | Es besteht das Risiko, dass einige der nicht implementierten Methoden für die Funktionalität des Snaps wichtig sein könnten und versehentlich übersehen wurden. |
| Standort | – Pakete/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 |
Beschreibung
Ein großer Teil der im Snap vorhandenen Methoden scheint ungenutzt zu bleiben. Es existiert lediglich der sie umgebende Boilerplate-Code, jedoch keine konkrete Logik.
Mitigation
Wir empfehlen, die Methoden, die Sie in Ihrem Snap implementieren möchten, zu überprüfen und sicherzustellen, dass sie alle tatsächliche Logik enthalten. Der Benutzer sollte nicht unnötige Methoden aufrufen können, die Sie nicht implementieren möchten.
Redundanter Code
| ID | SAGEN-04 |
| Status | Behoben |
| Risiko | Informational |
| Auswirkungen auf das Geschäft | Methoden, die dasselbe tun und dieselben Daten zurückgeben, vergrößern die Codebasis des Snaps unnötig. |
| Standort | – Pakete/Snap/src/index.ts:332, 338 |
Beschreibung
Während unserer Analyse haben wir festgestellt, dass zwei RPC-Methoden, EthRequestAccounts und EthAccounts, scheinbar dasselbe tun und dieselben Werte zurückgeben.
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];
}
In beiden Fällen rufen diese Methoden die Daten der aktiven Wallet mithilfe von getWallet() ab und geben anschließend deren Adresse zurück. Der einzige Unterschied besteht derzeit darin, dass EthAccounts protokolliert, EthRequestAccounts hingegen nicht.
Mitigation
Erwägen Sie, entweder eine der Methoden zu entfernen oder eine zu ändern, um sie von den anderen zu unterscheiden
Übrig gebliebene TODO-Kommentare
| ID | SAGEN-05 |
| Status | Behoben |
| Risiko | Informational |
| Auswirkungen auf das Geschäft | TODO-Kommentare und kommentierte Codeabschnitte können potenziellen Angreifern wertvolle Informationen liefern und wirken zudem unprofessionell. |
| Standort | – Pakete/Snap/src/index.ts:460, 550 – Pakete/Snap/src/polyfill.ts:7 – Pakete/Snap/src/Helfer/Parser/tx.ts:55 |
Beschreibung
Die Codebasis enthält mehrere TODO-Kommentare und auch Abschnitte mit auskommentiertem Code, der nicht mehr verwendet wird.
Dies ist zwar in einer Testumgebung akzeptabel, sollte aber in der Produktion vermieden werden. Solche Kommentare können potenziellen Stakeholdern wertvolle Informationen über fehlende Funktionen, Sicherheitsmaßnahmen und die Gedanken der Entwickler liefern, die zur Profilierung von Angriffen genutzt werden können.
Mitigation
Wir empfehlen, als TODO gekennzeichnete Kommentare und nicht verwendete Codefragmente in Ihrem Produktionszweig zu entfernen.




