Mastodon Mastodon Mastodon Mastodon

Desbordamiento de búfer

Actualizado: · CyberSecureFox Editorial Team

Un desbordamiento de búfer (buffer overflow) es un fallo de seguridad de memoria en el que un programa escribe en un búfer más datos de los que caben y sobrescribe la memoria contigua.

Cómo se produce un desbordamiento de búfer

Los programas escritos en C y C++ reservan búferes de tamaño fijo para cadenas, paquetes de red y otros datos. Si el código copia la entrada sin comprobar su longitud —con funciones como strcpy o sprintf—, los bytes sobrantes invaden la memoria vecina. En un desbordamiento de pila pueden sobrescribir la dirección de retorno de la función; en uno de montículo (heap) corrompen otros objetos y los metadatos del asignador de memoria.

Un atacante que controla esos datos puede desviar la ejecución hacia su propio código o reutilizar fragmentos existentes (programación orientada al retorno, ROP). El resultado suele ser la ejecución remota de código o una escalada de privilegios; en el mejor de los casos, un cierre del programa.

Por qué es importante

Los desbordamientos de búfer son una de las clases de vulnerabilidades más antiguas y explotadas. El gusano Morris usó uno en 1988, y Code Red (2001) y SQL Slammer (2003) se propagaron por todo el mundo gracias a desbordamientos en servidores de Microsoft. La escritura fuera de límites (CWE-787) sigue entre las primeras posiciones del CWE Top 25 de debilidades de software más peligrosas. Según Microsoft y Google, los fallos de memoria, junto con el use-after-free, suponen la mayoría de las vulnerabilidades críticas en grandes bases de código C/C++.

Cómo prevenirlos

  • Escribir el código nuevo en lenguajes con seguridad de memoria como Rust, Go, Java o C#, como recomiendan CISA y la NSA.
  • En C/C++, usar funciones con comprobación de límites y contenedores modernos, y probar con fuzzers y AddressSanitizer.
  • Mantener activas las protecciones del compilador y del sistema: stack canaries, DEP/NX, ASLR e integridad del flujo de control.
  • Aplicar parches cuanto antes: los exploits públicos para desbordamientos aparecen rápido.
Sinónimos:
buffer overflow, desbordamiento de buffer