O que ninguém te conta sobre guardas CPI mal configurados em programas Solana
A maioria dos desenvolvedores ignora que um CPI guard mal configurado pode abrir brechas críticas que só se manifestam em produção.
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.