Viendo que nadie dice nada, me aventuro a decir algo sin ser ni mucho menos un experto.
Más o menos las palabras lo indican. Un buffer es un lugar donde almacenar cosas. Por lo que no es más que conseguir que un programa almacene más información de la que cabe en uno de los buffers que esté utilizando (aunque sea una simple tabla o array). Si eso se produce, se accedería a una zona de memoria que no está reservada para almacenar dicha información, e incluso podría llegar a machacar otros datos que esté manejando el programa. Normalmente, las consecuencias de eso es el cuelgue del programa y la salida del mismo (a cualquiera le ha pasado esto mientras está realizando un programa). Sin embargo, ese fallo del programa manejado por alguien con la maestría suficiente y tras un estudio del mismo, podría llegar a conseguir que se ese programa ejecute un código distinto y amenazar de esta manera la seguridad del sistema.
Suele ser bastante común ver fallos de este tipo desbordando la pila del programa, que puede conseguirse al obligar al programa en cuestión a realizar sucesivas llamadas a funciones propias o del sistema. De esta manera, como la pila se usa (entre otras cosas) para almacenar datos al saltar a la ejecución de una función podría llegar a desbordarse. No sé si me he explicado bien.
Como bien has dicho es una de las vulnerabilidades más extendidas en las aplicaciones. Por ello, últimamente, en las aplicaciones Unix/Linux se tiende a que éstas ejecuten el menor número de líneas de código bajo la identidad de root. También cada día más aplicaciones permiten ser ejecutadas en jaulas (chroot) y han aparecido muchas aplicaciones para controlar el uso de memoría de otras aplicaciones (como el caso de softlimit de daemontools) para controlar los agotamientos de memoria.
Lo dicho, no es seguro 100% pero creo que no andaré muy mal encaminado si me estoy equivocando.
Salu2.