Weaknesses of type CWE-14

10 results

Remoçã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.

Example

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.

How to mitigate

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.