Weaknesses of type CWE-196

7 results

Erro de conversão de inteiro sem sinal para com sinal

Ocorre quando um valor inteiro sem sinal (unsigned) é convertido para com sinal (signed) sem validação, causando interpretação incorreta do número. Se o valor unsigned é maior que o máximo do signed (ex: 2147483648 em um int de 32 bits), o resultado se torna negativo, quebrando lógica de validação e segurança que depende de valores positivos.

Example

Uma função recebe um tamanho de buffer como unsigned int, valida se é menor que MAX_SIZE, e o converte para int para passar a malloc(). Um atacante envia 2147483648 (que passa na validação unsigned), mas se torna -1 em int, fazendo malloc() alocar um minúsculo buffer — causando overflow na cópia de dados.

How to mitigate

Validar o valor antes de converter: garantir que um unsigned não ultrapasse o máximo seguro do signed equivalente. Melhor: usar tipos unsigned consistentemente em lógica de tamanhos e buffers, ou usar bibliotecas que fazem conversão segura com checagem de overflow.