
El Vaso de Agua que Tumba Servidores: Una Introducción al "Buffer Overflow"
- Alex De los Llanos Dueñas
- Septiembre 2025
En ciberseguridad, nos encanta hablar de amenazas con nombres rimbombantes y acrónimos que parecen sacados de una agencia de espionaje. Pero a veces, los trucos más viejos, los más fundamentales, siguen siendo los más devastadores. Y si hay una vulnerabilidad que se puede considerar el "pecado original" de la programación, la madre de miles de hackeos históricos, es, sin duda, el desbordamiento de búfer, o buffer overflow.
Suena técnico y aburrido, lo sé. Pero te prometo que al final de este artículo, no solo vas a entender perfectamente en qué consiste, sino que verás por qué este "fallo de fontanería" digital sigue tumbando sistemas en pleno 2025. Y para explicarlo, no necesitamos una pizarra llena de código. Solo necesitamos un vaso de agua.
La Teoría del Vaso de Agua: Entendiendo qué es un Búfer
Imagina la memoria de un programa informático como una estantería de cocina, perfectamente ordenada. En esa estantería, el programador ha colocado una fila de vasos de cristal, uno al lado del otro. Cada vaso tiene un propósito específico y una etiqueta: un vaso es para guardar el "Nombre de Usuario", otro para la "Contraseña", otro para la "Última Hora de Conexión", y así sucesivamente. En nuestra jerga, cada uno de esos vasos es un búfer.
Ahora, centrémonos en el vaso etiquetado como "Nombre de Usuario". Cuando el programador lo diseñó, tuvo que decidir de qué tamaño hacerlo. Tras pensarlo un poco, dijo: "Bueno, un nombre de usuario normal no va a tener más de 20 caracteres. Para ir sobrado, voy a fabricar un vaso que tenga capacidad para exactamente 20 letras". Dicho y hecho. El sistema funciona a la perfección. Cuando un usuario normal, como "Ana", introduce su nombre, las 3 letras caen en el vaso, ocupan un pequeño espacio en el fondo y no hay ningún problema.
El programa es feliz, el sistema es estable. El vaso cumple su función. El problema, como siempre, empieza cuando alguien decide no seguir las reglas. Cuando alguien, en lugar de una jarra pequeña de agua, aparece con una manguera de bomberos.
El Desbordamiento: Cuando el Agua se Convierte en Veneno
Aquí es donde entra en escena el atacante. El atacante ve el campo "Nombre de Usuario" y no ve un sitio para escribir su nombre. Ve una oportunidad. En lugar de escribir "Carlos", escribe un galimatías de 500 caracteres.
Si el programador hubiera sido precavido, habría puesto una simple comprobación: "Si el nombre que me dan tiene más de 20 letras, muestra un error y no hagas nada". Pero en muchísimos programas, especialmente los escritos en lenguajes más antiguos y rápidos como C o C++, esa comprobación no existe. El programa, tonto y obediente, recibe la orden de "mete estas 500 letras en el vaso del nombre" y eso es exactamente lo que intenta hacer.
El resultado es el que te imaginas. Las primeras 20 letras llenan el vaso hasta el borde. ¿Y el resto? Las otras 480 letras se desbordan, se derraman por encima y, por pura gravedad, caen en los vasos que están al lado en la estantería. A esto lo llamamos un desbordamiento de búfer.
"Vale", pensarás, "ha montado un lío, ha mojado los otros vasos, pero ¿dónde está el peligro?". El peligro reside en qué vaso es el que se moja. Porque el atacante ha estudiado el orden de la estantería. Y sabe que, justo al lado del vaso del "Nombre de Usuario", hay un vaso sagrado, uno de los más importantes de todo el programa. Ese vaso no guarda datos de un usuario. Guarda una instrucción vital: la dirección de memoria de la siguiente tarea que el programa debe ejecutar. Es la "chuleta" que le dice al programa qué hacer a continuación.
El atacante no ha metido 500 letras al azar. Ha fabricado su ataque con una precisión milimétrica. La parte que se desborda, el "agua envenenada", contiene dos cosas: un pequeño fragmento de código malicioso (su programa, el payload) y una nueva dirección que apunta a ese mismo código. Al desbordarse, esta mezcla cae en el vaso de las "instrucciones", borra la dirección original y legítima, y escribe encima la dirección del atacante.
La secuencia del desastre es la siguiente: el programa termina de procesar el nombre de usuario. Acto seguido, para saber qué hacer, consulta su "chuleta". Pero la chuleta ha sido manipulada. La dirección que lee ya no le manda a la siguiente tarea legítima, sino que le manda directamente al código del atacante. El programa, sin dudarlo, obedece. Y en ese instante, el atacante ha ganado. Acaba de secuestrar el programa para que ejecute sus propias órdenes, obteniendo a menudo el control total del sistema.

El Fantasma del Pasado: ¿Por Qué Sigue Vivo este Fallo?
Entiendo la pregunta. Si este truco es tan viejo y tan conocido, ¿cómo es posible que siga siendo una amenaza relevante hoy en día? La respuesta es simple: por la herencia y por la proliferación.
La herencia se refiere a que el mundo digital moderno está construido sobre los cimientos de código escrito hace décadas. Millones de líneas de código en lenguajes como C y C++, que fueron diseñados para ser rápidos, no necesariamente seguros. Estos lenguajes le dan al programador un control absoluto, pero no le ponen "redes de seguridad". No comprueban si el vaso se desborda, asumen que el programador es perfecto. Y como los programadores son humanos, cometen errores, dejando estas puertas abiertas.
La proliferación se refiere a la explosión del Internet de las Cosas (IoT). Tu cámara de seguridad, tu router, tu smart TV, los sensores de una fábrica... todos esos pequeños aparatos necesitan ser muy eficientes. Por eso, su software a menudo se escribe en estos lenguajes de bajo nivel. Son sistemas con un código simple, a menudo antiguo y casi nunca actualizado, lo que los convierte en el objetivo perfecto para este tipo de ataques. Son millones de vasos pequeños esperando a que alguien llegue con demasiada agua.
Conclusión
El buffer overflow nos enseña una de las lecciones más importantes de la ciberseguridad: los fallos más catastróficos a menudo nacen de las suposiciones más simples y de los errores más fundamentales. La idea de que "nadie usaría un nombre de más de 20 letras" ha costado miles de millones en daños a lo largo de la historia.
Aunque los lenguajes y las herramientas de programación modernos han mejorado mucho para evitar estos fallos, el inmenso universo de software y hardware antiguo que nos rodea garantiza que este "pecado original" seguirá siendo una amenaza durante muchos años. Es un recordatorio de que la seguridad no solo consiste en poner defensas complejas, sino en asegurarse de que los cimientos más básicos de nuestra casa digital sean sólidos como una roca.
Detectar este tipo de vulnerabilidades en tus sistemas o en el software de terceros es un trabajo de especialistas. Si quieres saber si tu empresa podría estar expuesta a este y otros riesgos fundamentales, contacta con nosotros de inmediato.