Переполнение Буфера (Buffer Overflow) используется злоумышленниками, чтобы изменить ход выполнения приложения путем переполнения переменных памяти. Переполнение Буфера является распространенной ошибкой программного обеспечения, которая приводит к сбойной ситуации. Сбойная ситуация возникает, когда данные, записываемые в память, превышают размер отведенного под них буфера. Поскольку буфер переполнен, соседние адреса памяти переписываются, что приводит программное обеспечение к системной ошибке или аварийному сбою. Если при этом для переполнения буфера могут быть использованы неограниченные, особым образом подготовленные входные данные, это может привести к множеству проблем безопасности.
Переполнение Буфера может быть использовано, как атака Отказ в Обслуживании (DoS), когда память разрушается, приводя к отказу программного обеспечения. Еще более критичным является возможность выполнения атаки Переполнение Буфера, чтобы изменить ход выполнения приложения и вызвать непреднамеренные действия. Такой сценарий может быть достигнут различными способами. Дыры в безопасности, вызванные Переполнением Буфера, могут быть использованы для переписывания указателей стека и перенаправления программы для выполнения злонамеренных команд. Переполнение Буфера может быть также использовано для изменения программных переменных.
Дыры в безопасности, вызванные Переполнением Буфера, довольно распространенны в сфере информационной безопасности и часто являются настоящим бедствием для веб-серверов. Однако, они обычно не наблюдаются и не используются непосредственно на уровне веб-приложений. Основная причина этого заключается в том, что злоумышленнику необходимо исследовать исходные тексты приложения или бинарные коды программного обеспечения. Поскольку злоумышленник должен выполнить на удаленной системе, подготовленный им, программный код, без такого исследования, он вынужден был бы выполнять атаку вслепую, делая тем самым благоприятный исход атаки очень маловероятным.
Дыры в безопасности, вызванные Переполнением Буфера наиболее распространены в системных языках программирования, таких как C и C++. Переполнение Буфера может происходить и в CGI программе или когда веб-страница имеет доступ к программе на C.