O erro mais caro que vejo em programas Solana: overflow não verificado em Rust

rust dev.to

Mais de 40 % dos exploits em Solana em 2025 foram causados por overflow não detectado em Rust.

Problema
Fundadores e CTOs que lidam com projetos acima de R$ 30 mil por contrato veem o risco de perdas inesperadas quando cálculos de token ultrapassam o limite de u64. A auditoria pré‑launch costuma apontar o ponto, mas a correção costuma ser adiada por questões de prazo, expondo o programa a ataques de overflow que podem queimar todo o pool de liquidez.

Insight
Nossa equipe adota três práticas que evitam esse ponto fraco:

  1. Substituímos todas as operações aritméticas por métodos checked (checked_add, checked_sub, checked_mul).
  2. Integramos o lint cargo-audit com regras customizadas que falham a compilação ao detectar uso de operadores +, -, * sem verificação.
  3. No Anchor, criamos um macro safe_math! que encapsula a lógica de verificação e gera um erro ProgramError::Custom(0xDEAD) caso o overflow ocorra, garantindo que a transação seja revertida antes de qualquer estado ser gravado.

Código vulnerável

// Vulnerável: soma sem checagem
let new_balance = user.balance + amount; // overflow possível
Enter fullscreen mode Exit fullscreen mode

Correção em 2 linhas

let new_balance = user.balance.checked_add(amount).ok_or(ProgramError::Custom(0xDEAD))?;
Enter fullscreen mode Exit fullscreen mode

A mudança elimina a possibilidade de overflow e mantém a lógica de negócios intacta.

Evidência
Em um audit anônimo de um protocolo de staking, identificamos um overflow que teria drenado US$ 210 k. A correção acima foi aplicada em 3 linhas e o relatório final confirmou a remoção total da vulnerabilidade.

CTA
⚠ Precisa garantir que seu programa Solana esteja livre de overflow antes do launch? Converse com nossa equipe: https://drexbrasil.com/contato

Source: dev.to

arrow_back Back to Tutorials