WEB3DEV

Cover image for Denial of Service (Recusa de Serviço) - Hack Solidity #7
pamelaaline
pamelaaline

Posted on

Denial of Service (Recusa de Serviço) - Hack Solidity #7

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.

Image description
O exemplo

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.

Image description
A solução

Espero que tenha gostado de ler.

Ciao!!!

Oldest comments (0)