Subdesbordamiento de entero
¿Qué es Subdesbordamiento de entero?
Subdesbordamiento de enteroFallo aritmetico (CWE-191) en el que restar de un entero sin signo bajo cero se envuelve a un valor enorme, habilitando asignaciones excesivas o desbordamientos.
El integer underflow ocurre cuando un entero sin signo se decrementa bajo cero, o cuando la aritmetica con signo cruza INT_MIN y el resultado se envuelve a un valor positivo muy grande. El patron clasico es len = header_len - prefix_len con prefix_len controlado por el atacante; el len enorme resultante salta los chequeos de limites y provoca desbordamientos de heap o pila, o lecturas fuera de limites. Ejemplos reales: CVE-2018-1000005 (libcurl) y multiples bugs del kernel donde la aritmetica size_t sobre longitudes de paquete subdesborda. Mitigaciones: aritmetica con signo y comparaciones explicitas, resta verificada (__builtin_sub_overflow, std::safe_int), trampas de overflow en el lenguaje (Rust debug, Swift), fuzzing con sanitizers (UBSan) y validacion estricta de entrada.
● Ejemplos
- 01
len = total - header_len que se vuelve 0xFFFFFFFF si total < header_len y luego se usa como tamano de memcpy.
- 02
Kernel Linux CVE-2019-11815 con una resta de longitud restante que subdesborda y habilita un UAF.
● Preguntas frecuentes
¿Qué es Subdesbordamiento de entero?
Fallo aritmetico (CWE-191) en el que restar de un entero sin signo bajo cero se envuelve a un valor enorme, habilitando asignaciones excesivas o desbordamientos. Pertenece a la categoría de Ataques y amenazas en ciberseguridad.
¿Qué significa Subdesbordamiento de entero?
Fallo aritmetico (CWE-191) en el que restar de un entero sin signo bajo cero se envuelve a un valor enorme, habilitando asignaciones excesivas o desbordamientos.
¿Cómo funciona Subdesbordamiento de entero?
El integer underflow ocurre cuando un entero sin signo se decrementa bajo cero, o cuando la aritmetica con signo cruza INT_MIN y el resultado se envuelve a un valor positivo muy grande. El patron clasico es len = header_len - prefix_len con prefix_len controlado por el atacante; el len enorme resultante salta los chequeos de limites y provoca desbordamientos de heap o pila, o lecturas fuera de limites. Ejemplos reales: CVE-2018-1000005 (libcurl) y multiples bugs del kernel donde la aritmetica size_t sobre longitudes de paquete subdesborda. Mitigaciones: aritmetica con signo y comparaciones explicitas, resta verificada (__builtin_sub_overflow, std::safe_int), trampas de overflow en el lenguaje (Rust debug, Swift), fuzzing con sanitizers (UBSan) y validacion estricta de entrada.
¿Cómo defenderse de Subdesbordamiento de entero?
Las defensas contra Subdesbordamiento de entero combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Subdesbordamiento de entero?
Nombres alternativos comunes: Underflow sin signo, CWE-191.
● Términos relacionados
- vulnerabilities№ 543
Desbordamiento de entero
Defecto en el que una operación aritmética produce un valor fuera del rango representable del tipo entero, con efectos de envoltorio o truncamiento críticos para la seguridad.
- vulnerabilities№ 131
Desbordamiento de búfer
Fallo de seguridad de memoria en el que un programa escribe más allá del final de un búfer asignado, corrompiendo memoria adyacente y a menudo permitiendo ejecución de código.
- attacks№ 772
Lectura fuera de limites
Fallo de seguridad de memoria (CWE-125) en el que el software lee fuera del buffer previsto y filtra contenidos de memoria adyacente.
- vulnerabilities№ 667
Corrupción de memoria
Término paraguas para vulnerabilidades en las que un programa escribe fuera de los límites previstos, comprometiendo seguridad de tipos, flujo de control o integridad de datos.
- appsec№ 538
Validación de entrada
Comprobación del lado del servidor que verifica que cada entrada no confiable cumple el tipo, longitud, rango, formato y conjunto de valores esperados antes de ser procesada.