Vulnerabilidades de Smart Contracts: O Pesadelo do Auditor

Confira aqui

Era 3:14 da manhã de uma terça-feira quando o canal do Discord da equipe de segurança começou a disparar notificações frenéticas. Não eram perguntas de usuários novatos ou memes sobre o preço do Bitcoin. Eram logs de transações. Alguém havia encontrado uma brecha no contrato de staking que auditamos semanas antes e estava drenando a liquidez, bloco por bloco. Eu me lembro da sensação fria no estômago enquanto abria o Etherscan. Ver os fundos saindo de um contrato inteligente não é como ver um roubo de banco em um filme; é silencioso, brutalmente eficiente e, na maioria das vezes, irreversível. Naquela noite, assistimos impotentes enquanto 4 milhões de dólares evaporavam devido a uma única linha de código mal posicionada. Esse é o pesadelo de qualquer auditor ou desenvolvedor Solidity. Diferente do desenvolvimento web tradicional, onde você pode simplesmente “subir um patch” ou reiniciar o servidor se algo der errado, a blockchain não perdoa. O código é imutável. Uma vez implantado na rede Ethereum, ele se torna uma lei autônoma. Se a lei tiver uma falha, o criminoso não está quebrando as regras; tecnicamente, ele está apenas seguindo as instruções que você escreveu errado. Vamos falar sobre o que realmente aconteceu naquela madrugada, porque ilustra a vulnerabilidade mais clássica e devastadora: a Reentrância. Imagine que você vai a um caixa eletrônico sacar dinheiro. O processo lógico seria:

1. Você pede o saque. 2. A máquina verifica seu saldo. 3. A máquina subtrai o valor do seu saldo. 4. A máquina entrega o dinheiro. No mundo dos Smart Contracts, a ordem dessas operações é vida ou morte. O erro no contrato que mencionei foi inverter os passos 3 e 4. O contrato entregava o dinheiro (enviava o ETH) antes de atualizar o saldo do usuário para zero. Parece inofensivo, certo? Mas aqui entra a malícia. O atacante criou um contrato malicioso que, ao receber o dinheiro no passo 4, automaticamente chamava a função de saque novamente antes que o passo 3 (atualizar o saldo) fosse executado.

Como o saldo ainda não tinha sido zerado, o contrato “vítima” achava que o usuário ainda tinha fundos e enviava o dinheiro de novo. E de novo. E de novo. Tudo dentro da mesma transação, até o contrato secar. É como se o atacante tivesse colocado o pé na porta do caixa eletrônico, impedindo-o de fechar a transação enquanto continuava pegando notas. Mas a reentrância é apenas a ponta do iceberg. O que realmente tira o sono de quem trabalha com DeFi (Finanças Descentralizadas) hoje são os ataques de manipulação de oráculos via Flash Loans. Isso é menos sobre código quebrado e mais sobre economia quebrada.

Um Flash Loan permite que você pegue emprestado milhões de dólares sem garantia, desde que pague na mesma transação. Já vi casos onde um hacker pegou 100 milhões de dólares emprestados por 15 segundos, usou esse capital massivo para manipular artificialmente o preço de um ativo em uma corretora descentralizada (DEX), e enganou um protocolo de empréstimo que usava aquele preço como referência. O protocolo, achando que o ativo valia muito, permitiu que o hacker sacasse todo o colateral. Ele pagou o empréstimo inicial e saiu com o lucro. O código estava “certo”, mas a lógica econômica foi destruída pela força bruta do capital.