Subdesbordo de inteiro
O que é Subdesbordo de inteiro?
Subdesbordo de inteiroFalha aritmetica (CWE-191) em que subtrair de um inteiro sem sinal abaixo de zero envolve para um valor enorme, permitindo alocacoes excessivas ou overruns.
Um subdesbordo (underflow) inteiro ocorre quando um inteiro sem sinal e decrementado abaixo de zero, ou aritmetica com sinal cruza INT_MIN, e o resultado se envolve num valor positivo muito grande. O padrao classico e len = header_len - prefix_len com prefix_len controlado pelo atacante; o len enorme resultante ignora verificacoes de limites e provoca overflows de heap/pilha ou leituras fora de limites. Exemplos reais: CVE-2018-1000005 (libcurl) e varios bugs de rede do kernel em que aritmetica size_t em comprimentos de pacote sofre underflow. Mitigacoes: aritmetica com sinal com comparacoes explicitas, subtracao verificada (__builtin_sub_overflow, std::safe_int), armadilhas de overflow no idioma (Rust debug, Swift), fuzzing com UBSan e validacao estrita de entradas.
● Exemplos
- 01
len = total - header_len que vira 0xFFFFFFFF quando total < header_len e e usado como tamanho de memcpy.
- 02
Linux CVE-2019-11815: subtracao do comprimento restante sofre underflow e permite UAF.
● Perguntas frequentes
O que é Subdesbordo de inteiro?
Falha aritmetica (CWE-191) em que subtrair de um inteiro sem sinal abaixo de zero envolve para um valor enorme, permitindo alocacoes excessivas ou overruns. Pertence à categoria Ataques e ameaças da cibersegurança.
O que significa Subdesbordo de inteiro?
Falha aritmetica (CWE-191) em que subtrair de um inteiro sem sinal abaixo de zero envolve para um valor enorme, permitindo alocacoes excessivas ou overruns.
Como funciona Subdesbordo de inteiro?
Um subdesbordo (underflow) inteiro ocorre quando um inteiro sem sinal e decrementado abaixo de zero, ou aritmetica com sinal cruza INT_MIN, e o resultado se envolve num valor positivo muito grande. O padrao classico e len = header_len - prefix_len com prefix_len controlado pelo atacante; o len enorme resultante ignora verificacoes de limites e provoca overflows de heap/pilha ou leituras fora de limites. Exemplos reais: CVE-2018-1000005 (libcurl) e varios bugs de rede do kernel em que aritmetica size_t em comprimentos de pacote sofre underflow. Mitigacoes: aritmetica com sinal com comparacoes explicitas, subtracao verificada (__builtin_sub_overflow, std::safe_int), armadilhas de overflow no idioma (Rust debug, Swift), fuzzing com UBSan e validacao estrita de entradas.
Como se defender contra Subdesbordo de inteiro?
As defesas contra Subdesbordo de inteiro costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Subdesbordo de inteiro?
Nomes alternativos comuns: Underflow sem sinal, CWE-191.
● Termos relacionados
- vulnerabilities№ 543
Overflow de inteiros
Bug em que uma operação aritmética produz um valor fora do intervalo representável do tipo inteiro, com wraparound ou truncamento de impacto crítico.
- vulnerabilities№ 131
Buffer overflow
Falha de segurança de memória em que um programa escreve para além do fim de um buffer alocado, corrompendo memória adjacente e permitindo frequentemente execução de código.
- attacks№ 772
Leitura fora de limites
Falha de seguranca de memoria (CWE-125) em que o software le antes, depois ou fora do buffer previsto, expondo conteudos de memoria adjacente.
- vulnerabilities№ 667
Corrupção de memória
Termo abrangente para vulnerabilidades em que um programa escreve fora dos limites previstos, comprometendo segurança de tipos, fluxo de controlo ou integridade de dados.
- appsec№ 538
Validação de entrada
Verificação no servidor que confirma se toda entrada não confiável corresponde ao tipo, comprimento, intervalo, formato e conjunto de valores esperados antes do processamento.