¿Qué es Buffer overflow (desbordamiento de búfer)?
$ man buffer-overflow
Vulnerabilidad que ocurre cuando un programa escribe más datos de los que caben en un búfer de memoria, sobrescribiendo zonas adyacentes y permitiendo fallos o ejecución de código arbitrario.
Un buffer overflow se produce cuando un programa copia datos en un espacio de memoria de tamaño fijo sin validar su longitud, y el excedente pisa memoria contigua. Es típico de lenguajes sin control automático de límites, como C y C++. Las variantes principales son el stack-based overflow, que puede sobrescribir la dirección de retorno de una función y desviar el flujo de ejecución, y el heap-based overflow, que corrompe estructuras de memoria dinámica. Las consecuencias van desde un simple crash (denegación de servicio) hasta la ejecución de código arbitrario.
🧪Ejemplo
Una función en C usa Código: text
strcpy(buffer, entrada);
con un Código: text
char buffer[16]
. Si el usuario envía una cadena más larga, los bytes sobrantes sobrescriben otras variables o la dirección de retorno, y el programa se cuelga o ejecuta algo que no debería.
🛡Cómo protegerse
Usar funciones con control de longitud (Código: text
strncpy
, Código: text
snprintf
, Código: text
fgets
) en lugar de Código: text
strcpy
, Código: text
sprintf
o Código: text
gets
.
Compilar con protecciones activadas: stack canaries, ASLR, DEP/NX y PIE.
Validar siempre el tamaño de toda entrada externa antes de copiarla a memoria.
Considerar lenguajes con seguridad de memoria (Rust, Go, Java) para código nuevo y crítico.
Aplicar análisis estático, fuzzing y revisión de código para detectar desbordamientos antes de producción.
⚠Para tener en cuenta
Las mitigaciones modernas dificultan la explotación pero no la hacen imposible: técnicas como ROP pueden evadirlas, así que lo fundamental sigue siendo corregir el código. Practicar explotación solo es legal en entornos propios, laboratorios o CTF autorizados.
Redactado con el asistente Underc0de IA. Actualizado el 10/11/2026. ¿Ves un error o querés sumar algo? Contanos en el foro.