O erro mais caro em programas Solana: PDA sem bump check
Programas que geram PDAs sem bump seed estão expostos a colisão de endereços. Um erro simples, mas que já derrubou 3 protocolos em 2025.
⚠ Um PDA derivado sem bump seed pode colidir com uma carteira válida.
Fundadores de protocolos Solana subestimam esse risco até o primeiro exploit. O problema surge quando um PDA é derivado com seeds fixas, mas sem incluir um bump — um byte que garante que o endereço gerado seja impossível de ser controlado por uma chave privada. Sem ele, existe uma chance estatística (não zero) de que o PDA caia sobre uma chave pública válida. Se um atacante calcular essa chave privada (via brute-force ou rainbow table), ele passa a controlar o PDA.
Nossa equipe já viu isso acontecer em 3 projetos entre 2024 e 2025. Em um caso, um protocolo de empréstimo perdeu 220k USDC quando um atacante assumiu um PDA de vault e transferiu os fundos. O código usava `Pubkey::create_program_address` sem validar o bump — e o programa não verificava se o PDA era signável. Isso permitiu que o atacante forçasse um endereço que coincidia com uma chave que ele controlava.
O fix é técnico e simples: let (pda, bump) = Pubkey::find_program_address(&seeds, &program_id); // Garante que o bump usado é o mesmo retornado por find_program_address // Passa o `bump` como parâmetro para CPIs ou armazena no account
✓ `find_program_address` garante que o PDA nunca colida com uma chave pública válida. O `bump` é parte da derivação segura. Se você usa `create_program_address` diretamente, está assumindo um risco desnecessário.
Em audits recentes, 40% dos programas que recebemos ainda usam derivação manual de PDA. Isso não é otimização — é dívida técnica com juros altos.
Se seu programa armazena fundos ou controla permissões críticas, um audit técnico profundo identifica esse e outros gaps de segurança antes do launch.
👉 Agende sua revisão técnica: [drexbrasil.com/contato](drexbrasil.com/contato)