Weaknesses of type CWE-128

3 results

Erro de transbordamento aritmético (wrap-around)

Ocorre quando uma operação aritmética ultrapassa o limite máximo ou mínimo de um tipo de dado inteiro, fazendo o valor 'enrolar' para o lado oposto da faixa. Por exemplo, somar 1 a um inteiro de 8 bits com valor 255 resulta em 0. Esse comportamento inesperado pode ser explorado para contornar validações ou causar alocações de memória erradas.

Example

Um validador de tamanho de buffer verifica se um inteiro sem sinal é menor que MAX_SIZE. Um atacante fornece um valor próximo ao máximo do tipo, que quando incrementado em uma operação interna, transborda para um número pequeno, passando na validação mas causando leitura ou escrita além dos limites reais.

How to mitigate

Use tipos com faixa definida (como uint32_t em vez de int), implemente validações antes de operações aritméticas (verifique se há espaço antes de somar), e considere usar linguagens ou ferramentas que detectem transbordamentos em tempo de desenvolvimento. Em C/C++, cuidado especial com aritmética de ponteiros e tamanhos de alocação.