Переполнение буфера в современных операционных системах может происходить по нескольким причинам:
- Неправильная форма входных данных. 2 Если предположить, что все входные данные будут меньше определённого размера, и буфер создан именно такого размера, то аномальная транзакция, которая производит больше данных, может привести к записи за пределы буфера. 2
- Отсутствие жёсткой защиты со стороны подсистемы программирования и операционной системы. 5 Это касается, например, языков программирования C и C++, которые не обеспечивают встроенной защиты от доступа или перезаписи данных в любой части памяти и автоматически не проверяют, находятся ли данные, записанные в массив, в границах этого массива. 2
- Ошибки индексирования массивов. 1 Они также являются источником переполнения памяти. 1
Современные операционные системы используют различные методы борьбы со злонамеренными переполнениями буфера, в частности, путём рандомизации расположения памяти или намеренного оставления пространства между буферами и поиска действий, которые записывают данные в эти области. 2