Introducción a desbordamientos y desbordamientos de enteros
Las vulnerabilidades de desbordamiento y desbordamiento de enteros se consideran la octava vulnerabilidad más peligrosa en la Lista de las 25 principales Enumeraciones de Debilidades Comunes (CWE) de 2019. Estos tipos de vulnerabilidades se crean por el mal uso de tipos de variables y se pueden explotar para eludir las protecciones contra otros tipos de vulnerabilidades, como los desbordamientos de búfer.
Tipos y tamaños de variables
Cada lenguaje de programación tiene el concepto de diferentes tipos de variables. Un carácter, que puede contener datos de texto, es muy diferente de un entero o un flotador. Sin embargo, más allá de estos tipos generales hay distinciones adicionales entre variables, y estas distinciones son las que hacen posible las vulnerabilidades de desbordamiento y desbordamiento de enteros.
La mayoría de los lenguajes de programación tienen el concepto de enteros con y sin signo. Un entero con signo (como su nombre indica) tiene un signo, lo que le permite almacenar valores positivos y negativos. Una variable sin signo, por otro lado, solo puede almacenar números positivos.
Como se muestra en la imagen de arriba, las variables firmadas y sin firmar de un tamaño determinado se escriben de forma idéntica en la memoria de un ordenador. La única diferencia es cómo se interpreta el valor. En un valor con signo, uno inicial significa un número negativo, mientras que en un valor sin signo, uno en el primer lugar solo significa un número grande.
La otra distinción principal entre diferentes tipos de variables» enteras » es el tamaño del valor que pueden contener. Los lenguajes de programación tienen los conceptos de corto, entero, largo y más allá, cada uno de los cuales define el tamaño del espacio de memoria asignado para esa variable y el rango de valores que puede contener.
Desbordamientos y desbordamientos enteros
Las vulnerabilidades de desbordamiento y desbordamiento enteros se reducen a una conversión insegura entre variables con y sin signo y tipos de variables enteras de diferentes tamaños. Generalmente se permite convertir entre estos diferentes tipos y, en muchos casos, (Leer más…)