Weaknesses of type CWE-188

2 results

Dependência de Layout de Memória/Dados

É quando o código assume uma organização específica dos dados em memória (ordem dos campos, alinhamento, tamanho das estruturas) sem garantias formais. Se o compilador, plataforma ou versão mudar esse layout, o código quebra silenciosamente — lendo dados errados, causando corrupção ou expondo segredos.

Example

Um programa lê campos de uma struct C fazendo aritmética de ponteiros (offset hardcoded em bytes) em vez de usar sizeof e offsetof. Se alguém reordenar ou adicionar padding à struct, o offset fica inválido e o programa lê lixo ou dados sensíveis de outras variáveis.

How to mitigate

Use APIs seguras e portáveis: offsetof(), sizeof(), serialização com protocolos bem-definidos (JSON, Protocol Buffers). Evite aritmética manual de ponteiros e assuma sempre que o compilador pode reorganizar layout. Valide size e alignment explicitamente ao cruzar limites de compilação ou plataforma.