Falhas do tipo CWE-1037

5 resultados

Remoção ou modificação de código crítico de segurança por otimizações do processador

O compilador ou processador remove ou transforma instruções de segurança (como limpeza de memória sensível, validações ou barreiras de execução) durante otimizações, pensando que são 'código morto' ou redundante. Isso quebra mecanismos de defesa que o desenvolvedor implementou propositalmente, expondo dados sensíveis ou permitindo ataques como bypass de proteções.

Exemplo

Um código que zera um buffer contendo senha após uso (`memset(senha, 0, tamanho)`) é removido pelo compilador porque nenhuma leitura segue aquela escrita. O processador elimina a instrução como 'inútil', deixando a senha ainda na memória — vulnerável a ataques de recuperação de dados.

Como mitigar

Use funções seguras de limpeza de memória específicas para cada linguagem (`explicit_bzero` no C, `sodium_memzero` na libsodium, ou volatile qualifiers); compile com flags que preservem código crítico (`-O0` ou `-fno-optimize` em seções sensíveis); teste o código assembly final para garantir que instruções defensivas não foram removidas.