Ошибка переполнения буфера — это ситуация ошибки, возникающая в компьютерной программе, когда программа частично сохраняет полученные данные за пределами зарезервированной для нее области памяти. Ошибка может привести к значительному повреждению работы программы и компьютерной системы, на которой она запущена. Ошибки переполнения буфера были самой важной технической причиной проблем безопасности в программах и операционных системах.

Переполнение буфера происходит, когда программа увеличивает или уменьшает индекс , указывающий на область памяти, настолько большую или маленькую, что индекс больше не указывает на область памяти, зарезервированную для буфера, но элементы данных, которые должны быть сохранены, перемещаются по ней в зарезервированные области памяти.

Ошибка переполнения буфера вызывает проблемы с безопасностью чаще всего в программах, реализованных на относительно низкоуровневых языках программирования. В них часто не учитывается необходимость защиты областей памяти от собственных, но неактуальных модификаций программы. К таким языкам относятся C и C++ . Некоторые языки, такие как Java и Lisp , внутренне заботятся об управлении памятью и невосприимчивы к ошибкам переполнения буфера. Однако иногда даже эти невосприимчивые языки программирования могут быть подвержены этой проблеме либо из-за проблемы в самой среде выполнения (многие виртуальные машины написаны на C или C++), либо из-за внешних подпрограмм, написанных на C или C++.