DEV Community

38bits
38bits

Posted on • Originally published at drexbrasil.com

O que ninguém te conta sobre guardas CPI mal configurados em programas Solana

Hook

⚠ Um programa Solana com 10 CPIs pode ser vulnerável a um ataque de re‑entrada que compromete até 70 % do seu capital em menos de 5 blocos.

Problema

Fundadores e CTOs que lideram projetos Web3 gastam mais de R$ 30 mil em desenvolvimento e ainda assim veem suas implantações falharem na primeira auditoria. O ponto crítico costuma ser a falta de CPI guards robustos: chamadas externas que não verificam a identidade do programa chamado ou os limites de gasto. Quando o contrato interage com pools de liquidez ou oráculos, a ausência de verificações suficientes gera vetores de ataque que só são descobertos após o lançamento.

Insight

Na 38bits, tratamos a segurança de CPIs como uma camada de defesa em profundidade. Primeiro, identificamos todas as dependências externas usando análise estática de AST (Abstract Syntax Tree) para mapear chamadas a invoke_signed. Em seguida, aplicamos três verificações que a maioria das auditorias padrão ignora:

  1. Validação de programa‑id – garantimos que o program_id passado para invoke_signed corresponde exatamente ao hash esperado, evitando program‑id spoofing.
  2. Limite de lamports – inserimos guardas que abortam a transação caso o saldo transferido ultrapasse um teto predefinido, mitigando ataques de drenagem massiva.
  3. Bump‑check de PDA – verificamos se a bump seed fornecida corresponde ao PDA derivado, impedindo que um atacante gere PDAs colidindo com recursos críticos.

Essas verificações são inseridas automaticamente por nosso macro de auditoria em Rust, que gera código de proteção sem impactar o desempenho. O resultado é um contrato que falha de forma controlada antes que o ataque consiga manipular o estado, reduzindo drasticamente a superfície de ataque.

Evidência

Em um projeto anônimo de DeFi, nossa equipe detectou que 4 dos 7 CPIs críticos não tinham validação de program_id. Após a correção, o risco de re‑entrada caiu de 85 % para menos de 2 % nas simulações de fuzzing, e o cliente avançou para a mainnet sem novos apontamentos de segurança.

CTA

Precisamos analisar seu código? Comece a conversa em https://t.me/Fl38bits_bot.

Top comments (0)