Que es un Buffer Overflow

Qué es un Buffer Overflow (desbordamiento de búfer)

En este artículo vamos a tratar de explica que es un Buffer Overflow

Una de las mayores vulnerabilidades de seguridad que tienen los actuales sistemas operativos y programas es ser sensibles a un desbordamiento de buffer, o como mejor se les conoce: Buffer Overflows.

Un poco de Historia…:

En Noviembre de 1988 se produce el primer ataque mediante esta tecnica usando un gusano que se aprovechaba de un desbordamiento de buffer en el servicio finger de un servidor Unix, solo fue el principio…

Durante los últimos años miles de vulnerabilidades basadas en Buffer Overflow han permitido que un atacante pueda ejecutar código malicioso en nuestras maquinas, es más, los seis primeros avisos de seguridad del CERT Coordination Center describen fallos de este tipo en numerosos programas.

¿Qué es un Buffer Overflow?

Básicamente un desbordamiento de buffer no tiene mucho secreto. Lo podemos comparar a cuando llenamos un cubo de agua, nos despistamos, el agua sale del cubo, no nos damos cuenta y al final se filtra y le cae al vecino de abajo.

Normalmente este fallo se da cuando el programador no tiene en cuenta el tamaño de algún buffer dentro de su programa y si este se llena de datos que no tienen salida, afectecta a otras partes de la memoria en las cuales hay otros datos o partes de otro programa viendose afectados y pudiendo causar un bloqueo tanto del programa afectado y del propio software que lo produce.

¿Cómo afecta a la seguridad de un equipo?

El problema de seguridad de los buffer overflow consiste en que si el programa hace llamadas a subrutinas con comandos que modifiquen esas subrutinas y estas caen en un desbordamiento de buffer, es decir, las subrutinas llamadas con esos modificadores se salen del buffer mediante un exploit, el proceso padre queda perdido y es cuando un atacante mediante dicho exploit puede incorporar rutinas a medida para que hagan lo que él, y no el programa afectado, quiera, y dentro de este ambito de posibilidades está el peligro ya que podrian ejecutar aplicaciones con los permisos que tenga ese programa, normalmente de SYSTEM.


Desbordamiento de búfer

El Buffer Overflow, o desbordamiento de búfer, es un error de programación que ocurre cuando un programa intenta guardar más información de la que un espacio de memoria (búfer) puede contener. Al pasar ese límite, los datos extra sobrescriben zonas de memoria cercanas, lo que puede provocar desde fallos del programa hasta graves vulnerabilidades de seguridad.

Este tipo de error es uno de los más antiguos y peligrosos en informática, y ha sido responsable de numerosos ataques informáticos a lo largo de la historia.


Entendiendo el concepto de “búfer” con un ejemplo sencillo

Antes de hablar del desbordamiento, es importante entender qué es un búfer.

Imagina lo siguiente:

  • Tienes una caja que solo puede almacenar 10 manzanas
  • Esa caja representa un búfer
  • Las manzanas representan datos

Si alguien intenta meter 12 manzanas en la caja:

  • Las 2 manzanas sobrantes no caben
  • Se caen o aplastan lo que haya alrededor

Eso mismo ocurre en un programa cuando se envían más datos de los permitidos:
los datos “sobrantes” invaden memoria que no les pertenece.


Qué sucede realmente en un Buffer Overflow

En un ordenador, la memoria está organizada de forma muy precisa. Cada programa tiene espacios asignados para:

  • Variables
  • Instrucciones
  • Direcciones de retorno
  • Datos temporales

Cuando ocurre un buffer overflow:

  1. El programa no comprueba el tamaño de los datos
  2. Se escriben más datos de los permitidos
  3. Se sobrescribe memoria adyacente
  4. El comportamiento del programa se vuelve impredecible

Esto puede causar:

  • Cierres inesperados
  • Errores graves
  • Ejecución de código malicioso

Un ejemplo cotidiano para entenderlo mejor

Imagina un formulario donde se pide tu nombre:

  • El programa reserva espacio para 20 caracteres
  • Tú escribes un nombre normal: “Carlos”
  • Todo funciona correctamente

Pero alguien escribe:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Si el programa no limita la entrada, esos caracteres extra:

  • Se escriben fuera del espacio asignado
  • Sobrescriben información crítica
  • Provocan un fallo o una vulnerabilidad

Ejemplo simple de Buffer Overflow en programación (explicado sin tecnicismos)

Supongamos un programa que guarda una contraseña:

  • El espacio reservado permite 8 caracteres
  • El programador no verifica el tamaño

Si un usuario introduce 20 caracteres:

  • Los primeros 8 se guardan bien
  • Los otros 12 pisan memoria vecina
  • Se altera el funcionamiento interno del programa

El resultado puede ser:

  • El programa se bloquea
  • Se salta una comprobación de seguridad
  • Se obtiene acceso no autorizado

Por qué los Buffer Overflow son tan peligrosos

El verdadero problema no es solo que el programa falle, sino que un atacante puede aprovechar el error.

Un atacante puede:

  • Introducir datos cuidadosamente diseñados
  • Sobrescribir instrucciones internas
  • Forzar al programa a ejecutar código malicioso

Esto puede permitir:

  • Tomar control del sistema
  • Robar información
  • Instalar malware
  • Escalar privilegios de usuario

Ejemplo conceptual de ataque con Buffer Overflow

Imagina que el atacante sabe que:

  • Después del búfer hay una instrucción importante
  • Puede sobrescribirla con datos propios

El atacante envía una entrada diseñada para:

  1. Llenar el búfer
  2. Sobrescribir la instrucción
  3. Redirigir el flujo del programa a su propio código

De esta forma, el programa obedece al atacante sin saberlo.


Tipos comunes de Buffer Overflow

Desbordamiento de pila (Stack Overflow Buffer)

  • Ocurre en la memoria llamada “pila”
  • Es el tipo más conocido
  • Muy peligroso en programas antiguos

Desbordamiento de montón (Heap Overflow)

  • Ocurre en la memoria dinámica
  • Más complejo de explotar
  • Muy usado en ataques modernos

Desbordamiento por lectura o escritura

  • Escritura: se escriben más datos de los permitidos
  • Lectura: se leen datos fuera de los límites

Programas y lenguajes más afectados

Los buffer overflow suelen aparecer más en lenguajes que:

  • Dan mucho control al programador
  • No gestionan automáticamente la memoria

Lenguajes propensos:

  • C
  • C++
  • Assembly

Lenguajes más seguros frente a este problema:

  • Python
  • Java
  • C#
  • JavaScript

Esto no significa que sean inmunes, pero reducen enormemente el riesgo.


Cómo se detectan los Buffer Overflow

Hoy en día existen herramientas que ayudan a detectarlos:

  • Análisis de código
  • Pruebas de seguridad
  • Fuzzing (enviar datos aleatorios)
  • Sistemas de detección de intrusiones

Muchos errores se descubren años después de haber sido programados.


Medidas para prevenir un Buffer Overflow

Aunque el usuario final no programe, es importante saber que los desarrolladores pueden prevenirlos mediante:

  • Validación estricta de entradas
  • Límites de tamaño
  • Uso de funciones seguras
  • Lenguajes con control automático de memoria
  • Protecciones del sistema operativo

Los sistemas modernos también incluyen:

  • ASLR (aleatorización de memoria)
  • DEP (prevención de ejecución de datos)
  • Stack Canaries

Por qué este problema sigue existiendo hoy

Aunque es un error conocido desde hace décadas, sigue apareciendo porque:

  • Hay mucho software antiguo
  • Algunos programadores no siguen buenas prácticas
  • El código se reutiliza sin revisión
  • Los sistemas crecen y se vuelven complejos

Por eso, el buffer overflow sigue siendo un tema clave en ciberseguridad.


Resumen final para principiantes

Un Buffer Overflow es:

  • Un error por escribir demasiados datos
  • Un problema de límites de memoria
  • Una de las vulnerabilidades más peligrosas
  • Una puerta de entrada para ataques informáticos

Dicho de forma simple:

Cuando un programa no controla cuánto recibe, puede perder el control de sí mismo.

Entender este concepto es un primer paso fundamental para comprender cómo funcionan los ataques informáticos y por qué la seguridad del software es tan importante hoy en día.

Si quieres, en un próximo artículo puedo explicarte:

  • Ejemplos reales de ataques famosos
  • Buffer Overflow paso a paso con diagramas
  • Diferencias entre errores de programación y vulnerabilidades
  • Cómo proteger un sistema como usuario final

¿Qué puedo hacer ante esto?

Al tratarse de fallos en software lo único que podemos esperar es que el programador conozca la vulnerabilidad y saque un parche solventando el problema.