Falhas do tipo CWE-1037
5 resultadosRemoçã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.
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.
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.