¿El error de heartbleed es una manifestación del clásico exploit overflow overflow en C?

En una de nuestras primeras conferencias de CS sobre seguridad, se nos explicó el problema de C al no verificar las supuestas longitudes del búfer y algunos ejemplos de las diferentes formas en que se podría aprovechar esta vulnerabilidad.

En este caso, parece que fue un caso de una operación de lectura maliciosa, donde la aplicación solo leyó la cantidad de bytes de memoria

¿Estoy en lo cierto al afirmar que el error Heartbleed es una manifestación del problema de comprobación de la longitud del búfer C?

¿Por qué el uso malicioso no causó una falla de segmentación cuando trató de leer la memoria de otra aplicación?

¿Simplemente poner a cero la memoria antes de escribir en ella (y luego leerla) habría causado una falla de segmentación? ¿O esto varía entre sistemas operativos? ¿O entre algún otro factor ambiental?

Aparentemente, las explotaciones del error no se pueden identificar. ¿Es porque la función de latido no se registra cuando se llama? De lo contrario, ¿es probable que cualquier solicitud de una cadena de ~ 64k sea maliciosa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta