Esse artigo é uma tradução de Zuhaib Mohammed feita por Pamela Aline. Você pode encontrar o artigo original aqui.
Jan 11
Neste Hack, vamos aprender como realizar um ataque de Denial of Service (Recusa de Serviço) a um smart contract. A ideia básica por detrás do hack é rejeitar o ether que está sendo enviado, ao não definir a fallback function e impedir que o resto da lógica de executar caso a transação seja bem sucedida.
Aprenda através do Exemplo
Abaixo está um contrato KingOfEther (Rei do Ether). É um jogo onde cada usuário precisa depositar mais ether do que o usuário anterior para se tornar o Rei. O atacante malicioso define um contrato de Ataque sem fallback function. Assim, qualquer chamada tentando enviar ether para o contrato de Ataque feito pelo usuário depois de o atacante se tornar o Rei falhará e reverterá o estado.
Uma vez que o atacante se torne o Rei. O pedido subsequente para claimThrone (reivindicar o Trono) nunca chega à Linha 14, pois a condição na Linha 11 falhará sempre. Como resultado, o atacante traz uma parada total no jogo, e nenhum novo usuário pode depositar e se tornar o Rei.
A solução
Na solução dada abaixo, mantemos um mapeamento de saldos para os fundos de cada usuário e o atualizamos na chamada do ClaimThrone. O usuário que foi destronado pelo novo usuário, pode chamar a função de saque (ele/ela não deve ser o Rei - Linha 18) e transferir seus fundos.
O jogo continuará independentemente de os fundos terem sido retirados ou não e o saldo dos usuários que não retiraram os fundos é mantido no mapeamento dos saldos.
Espero que tenha gostado de ler.
Ciao!!!
Latest comments (0)