Переполнение буфера в программах на C++ происходит из-за отсутствия проверки границ во многих функциях управления памятью. 1
Также уязвимость возникает, когда строка копируется или записывается в буфер фиксированного размера без должной проверки длины строки. 5 Если строка превышает размер буфера, то она может перезаписать смежные области памяти, включая важные данные или адреса возврата функций. 5
Ещё одна причина переполнения буфера — использование функций стандартной библиотеки C, которые при работе с буферами не контролируют размеры источника и приёмника данных. 24 Например, scanf('%s', buf), strcpy(dst, src), strcat(dst, src), gets(str). 4
Чтобы избежать переполнения буфера, нужно обеспечивать высокий уровень контроля за созданием и изменениями программного кода, осуществляющего управление буферами. 3