Introdução a Overflow e underflow inteiros
as vulnerabilidades de overflow e underflow inteiro são consideradas a oitava vulnerabilidade mais perigosa na lista Top 25 da Common Weakness Enumeration (CWE) de 2019. Esses tipos de vulnerabilidades são criados por uso indevido de tipos de variáveis e podem ser explorados para contornar as proteções contra outros tipos de vulnerabilidades, como estouros de buffer.
tipos e tamanhos variáveis
cada linguagem de programação tem o conceito de diferentes tipos de variáveis. Um caractere, que pode conter dados de texto, é muito diferente de um inteiro ou de um float. No entanto, além desses tipos gerais, há distinções adicionais entre variáveis, e essas distinções são o que torna possíveis vulnerabilidades de estouro de inteiros e underflow.
a maioria das linguagens de programação tem o conceito de inteiros assinados e não assinados. Um inteiro assinado (como o nome sugere) tem um sinal, permitindo que ele armazene valores positivos e negativos. Uma variável não assinada, por outro lado, só pode armazenar números positivos.
conforme mostrado na imagem acima, as variáveis assinadas e não assinadas de um determinado tamanho são gravadas de forma idêntica na memória de um computador. A única diferença é como o valor é interpretado. Em um valor assinado, um valor principal significa um número negativo, enquanto em um valor não assinado, um no primeiro ponto significa apenas um grande número.
a outra distinção principal entre diferentes tipos de variáveis” inteiras ” é o tamanho do valor que eles podem conter. As linguagens de programação têm os conceitos de curto, inteiro, longo e além, cada um dos quais define o tamanho do espaço de memória alocado para essa variável e o intervalo de valores que ela pode conter.
overflows e underflows inteiros
as vulnerabilidades Integer overflow e underflow se resumem à conversão insegura entre variáveis assinadas e não assinadas e tipos de variáveis inteiras de tamanhos diferentes. Geralmente é permitido converter entre esses diferentes tipos e, em muitos casos, (leia mais…)