En seguridad informática y programación , una sobrelectura de búfer [1] [2] o lectura fuera de límites [3] es una anomalía en la que un programa , mientras lee datos de un búfer , sobrepasa el límite del búfer y lee (o intenta leer) la memoria adyacente. Este es un caso especial de violación de la seguridad de la memoria .
Las lecturas excesivas del búfer pueden ser provocadas, como en el caso del error Heartbleed , por entradas creadas con fines malintencionados que están diseñadas para explotar la falta de comprobación de límites para leer partes de la memoria que no están destinadas a ser accesibles. También pueden ser causadas únicamente por errores de programación. Las lecturas excesivas del búfer pueden provocar un comportamiento errático del programa, incluidos errores de acceso a la memoria , resultados incorrectos, un bloqueo o una violación de la seguridad del sistema. Por lo tanto, son la base de muchas vulnerabilidades del software y pueden ser explotadas con fines malintencionados para acceder a información privilegiada. [ cita requerida ]
En otras ocasiones, las lecturas excesivas del búfer que no son causadas por entradas maliciosas pueden provocar fallas si activan errores de páginas no válidas . Por ejemplo, las interrupciones generalizadas de TI en 2024 fueron causadas por un error de memoria fuera de límites en el software de ciberseguridad desarrollado por CrowdStrike . [4]
Los lenguajes de programación comúnmente asociados con sobrelecturas de búfer incluyen C y C++ , que no proporcionan protección incorporada contra el uso de punteros para acceder a datos en cualquier parte de la memoria virtual , y que no verifican automáticamente que la lectura de datos de un bloque de memoria sea segura; los ejemplos respectivos son intentar leer más elementos de los que contiene una matriz, o no agregar un terminador final a una cadena terminada en nulo . La verificación de límites puede prevenir sobrelecturas de búfer, [5] mientras que las pruebas fuzz pueden ayudar a detectarlas.