O que é Integer Overflow Attack?
Integer Overflow Attack ocorre quando um número de um programa atinge o seu valor máximo e volta ao início, permitindo que um atacante manipule saldos ou limites. No cripto, esse retorno pode transformar uma verificação como “tem tokens suficientes?” num sim quando deveria ser um não. Imagine o odómetro de um carro antigo a passar de 999999 para 000000, mas com dinheiro em jogo.
“Compiladores modernos tornam isto impossível.” Não exactamente. Muitos contratos inteligentes ainda usam aritmética sem verificação em alguns pontos, matemática personalizada ou assembly que pode reintroduzir falhas de overflow.
Como funciona o Integer Overflow Attack
Aqui vai uma explicação rápida usando um contrato de token como palco.
- Passo 1: O contrato guarda saldos com inteiros de tamanho fixo e tem uma função que adiciona, subtrai ou multiplica valores.
- Passo 2: O atacante escolhe entradas que levam um número além do máximo, causando um retorno para um valor pequeno ou semelhante a zero.
- Passo 3: Esse retorno inverte uma verificação. Exemplo: após o wrap, o saldo parece enorme ou o limite de transferência parece ínfimo, por isso um require passa.
- Passo 4: O atacante cunha tokens não ganhos, ultrapassa um limite, ou transfere fundos que não deveria poder mover.
- Passo 5: Movem os ganhos através de trocas ou pontes e saem antes que alguém perceba.
História real: vários tokens ERC20 tiveram um bug de overflow em operações em lote que permitiu a atacantes cunhar suprimentos absurdos e depois despejá-los nas exchanges. Sim, isso aconteceu.
Porque o Integer Overflow Attack importa
Se segura tokens, constrói aplicações ou negoceia em DeFi, isto interessa-lhe. Trata-se de números, e os números comandam o cripto.
- Vantagem: Saber como isto funciona ajuda a detetar sinais de alerta cedo e a proteger o seu dinheiro.
- Perspetiva: Erros aritméticos são intemporais. Surgem novas cadeias e ferramentas, mas falhas matemáticas continuam a ser exploradas por atacantes experientes.
- Relevância: Verá isto na matemática do fornecimento de tokens, em sistemas de recompensas, contadores de NFT e em populares dApps que gerem saldos de utilizadores.
Em Solidity, mantenha a aritmética verificada por defeito e mantenha os blocos unchecked pequenos e auditados. Adicione testes fuzz que tentem valores extremos, não apenas os caminhos de sucesso.
Principais características do Integer Overflow Attack
O que o diferencia de outras falhas:
- Transbordo circular: Os números saltam do máximo de volta para zero como um contador circular.
- Silencioso: Não há erro nativo se a aritmética não for verificada, por isso as falhas parecem resultados legítimos.
- Ativável: Frequentemente entradas controladas pelo utilizador podem forçar o momento exato em que ocorre.
- Repetível: Uma vez descoberta, os atacantes podem automatizá-la e executá-la em muitos alvos.
Variações
Principais tipos que ouvirá mencionar, mesma família, rotas diferentes:
- Underflow: A subtração cai abaixo de zero e retorna para um valor enorme.
- Adição: Ao somar a um saldo ou ao fornecimento, ultrapassa o máximo e volta para valores pequenos.
- Multiplicação: Multiplicadores de recompensa ou fatores de escala fazem o valor ultrapassar os limites.
- Contador: IDs de token ou contadores de fornecimento rolam e permitem que a cunhagem continue além do limite.
Integer Overflow Attack não é apenas uma questão de Solidity. Pode surgir em Vyper, Rust, Move ou assembly personalizado, e muitos exploits publicitados resumem-se a matemática sem verificação em torno de saldos ou fornecimentos.
Exemplo
Uma função de recompensas multiplica um número fornecido pelo utilizador por um bónus elevado, o valor volta ao início, a verificação do limite passa e o Integer Overflow Attack permite ao atacante cunhar muito mais tokens do que o pretendido.
Curiosidade
O clássico arcade com o ecrã mortal do nível 256? Essa famosa paragem resultou de um overflow de inteiro, provando que até jogos retro podem, por acaso, antecipar bugs de cripto.
Resumo
Pense no Integer Overflow Attack como números a dar uma volta completa e ladrões a correr pela folga; mantenha a matemática verificada e dormirá mais descansado.
