Популярная, старая, но все еще актуальная уязвимость, возникает, когда для данных выделено не достаточно памяти (буфера).
Характерна для языков программирования, в которых памятью управляют (могут управлять) разработчики (С, С++ и т.д.).
Пример:
char src[6]= "Hello"; char dest[5]; strcpy(dest, src); printf("src- %s", src); // src- printf("dest- %s", dest); // dest- Hello
В стеке, адреса памяти назначаются последовательно, следовательно, то что не вместилось в стек dest, начало перезаписывать нижестоящий стек, src.