Weaknesses of type CWE-14
10 resultsRemoção de código de limpeza de buffers pelo compilador
O compilador otimiza e remove instruções que limpam buffers sensíveis (como senhas ou chaves criptográficas) porque detecta que a variável não é mais usada após isso. O desenvolvedor escreveu a limpeza, mas o compilador a descarta como 'código morto', deixando dados sensíveis na memória onde podem ser recuperados.
Um programa faz login, armazena a senha em um buffer, depois executa `memset(buffer, 0, sizeof(buffer))` para apagar. Com otimizações ativadas (-O2, -O3), o compilador remove o memset porque 'buffer não é lido depois', e a senha permanece na RAM.
Use funções de limpeza segura que o compilador não otimiza (como `SecureZeroMemory`, `explicit_bzero` em C, ou wrappers que impedem otimização). Alternativa: desabilitar otimizações agressivas apenas nessas seções críticas, ou usar flags como `-fno-optimize-sibling-calls` onde apropriado.