Acabei de escrever uma análise sobre reentrancy - um problema de segurança que muitos desenvolvedores ainda ignoram ao construir contratos inteligentes.



Simplificando, reentrancy é quando um contrato inteligente é chamado várias vezes antes de completar a primeira chamada. Imagine assim: ContractA está executando uma função, ele chama ContractB, e ContractB chama de volta ContractA enquanto ContractA ainda não terminou. Essa é uma vulnerabilidade que um atacante pode explorar.

Um exemplo específico: EtherStore tem 10 Ether, ContractB enviou 1 Ether para ele. Quando ContractB chama a função de saque, ele verifica se o saldo é maior que 0, e se for, envia Ether de volta. Mas aqui está o perigo - a atualização do saldo para 0 acontece após o envio. Portanto, o atacante pode criar uma função fallback que, ao receber Ether, chama novamente a função de saque. Esse loop continua até que o Ether acabe.

Vou listar três maneiras de prevenir reentrancy:

Primeiro, usar o modificador nonReentrant. Essa abordagem bloqueia o contrato enquanto a função está em execução, impedindo que seja reentrado. Simples, mas eficaz para uma única função.

Segundo, aplicar o padrão Checks-Effects-Interactions. Em vez de atualizar o saldo após o envio, atualize antes. Assim, mesmo que uma chamada recursiva aconteça, o saldo já estará zerado, e a verificação falhará.

Terceiro, criar um contrato separado chamado GlobalReentrancyGuard. Essa abordagem usa uma variável de estado comum para controlar reentrancy em vários contratos ao mesmo tempo. Especialmente útil quando seu projeto envolve múltiplos contratos interagindo. Em vez de verificar em cada contrato, você verifica em um ponto centralizado.

O problema de reentrancy não é novo, mas ainda é uma das vulnerabilidades mais comuns. Vejo muitos desenvolvedores que ainda não aplicam essas medidas de forma consistente. Se você trabalha com Solidity, certifique-se de entender bem esse problema e aplicar pelo menos um dos três métodos no seu projeto. Segurança de contratos inteligentes não é opcional, é obrigatório.
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • Comentário
  • Repostar
  • Compartilhar
Comentário
Adicionar um comentário
Adicionar um comentário
Sem comentários
  • Marcar